Vue-cli3.0下的雪碧图插件webpack-spritesmith配置方法
在前端项目中,为了减少对图片的请求次数,一般而言需要进行雪碧图的配置。即将多张小图标合并成一张图片,这样页面中的小图标都在一张图片上,只需请求一张图片,就可以通过CSS设置各个小图标的显示,利于节省带宽和资源。
雪碧图插件一般还支持快速引用小图标,例如当我们需要在html中放入service.png这张图片时,我们只需要使用<i class="icon icon-service"></i>
这样的简单引入方式,省去了繁琐的引入图片的样式编写,大大提升效率。
在Vue-cli 3.0项目中常用webpack-spritesmith
进行相关配置,该插件的文档不太直观,并且文档中基于webpack,而vue-cli 3.0的配置是与webpack有所差异的。本文着眼于探讨基于vue-cli3.0项目的该插件的配置方法,使用vue-cli3.0的链式操作进行配置示例。
安装
npm i webpack-spritesmith
引入
const path = require('path');
const SpritesmithPlugin = require('webpack-spritesmith');
使用插件
const templateFunction = function(data) {
var shared = ".icon { display: inline-block; vertical-align: middle; background-image: url(I) }".replace(
"I",
data.sprites[0].image
);
var perSprite = data.sprites
.map(function(sprite) {
return ".icon-N { width: Wpx; height: Hpx; background-position: Xpx Ypx; }"
.replace("N", sprite.name)
.replace("W", sprite.width)
.replace("H", sprite.height)
.replace("X", sprite.offset_x)
.replace("Y", sprite.offset_y);
})
.join("\n");
return shared + "\n" + perSprite;
};
module.exports = {
chainWebpack: config => {
// 将小图标拼接成雪碧图
config.plugin("webpack-spritesmith").use(Spritesmith, [
{
src: {
cwd: "./src/assets/images/icon/",
glob: "*.png"
},
target: {
image: "./src/assets/images/sprite/sprite.png",
css: [
[
path.resolve(__dirname, "./src/assets/scss/icon/_sprite.scss"),
{
// 引用自己的模板
format: "function_based_template"
}
]
]
},
apiOptions: {
cssImageRef: "../../images/sprite/sprite.png"
},
customTemplates: {
function_based_template: templateFunction
},
spritesmithOptions: {
algorithm: "binary-tree",
padding: 10
}
}
]);
}
}
参数说明
- src 配置创建雪碧图的源文件
– cwd 要创建雪碧图的源文件夹
– glob 要创建雪碧图的源文件类型
即将src.cwd路径下的所有匹配src.glob的源文件生成雪碧图。以上案例中,
./src/assets/images/icon/
路径下的所有.png
文件都会拼接到雪碧图。
- target 配置生成的雪碧图文件
– img 生成的雪碧图路径和文件名
– css 引用生成的雪碧图的样式文件的路径和模板等配置
在上述案例中,生成的雪碧图的路径是.
./src/assets/images/sprite/sprite.png
,生成的引用雪碧图的样式文件的路径是./src/assets/scss/icon/_sprite.scss
,并且_sprite.scss
中的内容在function_based_template
中定义,而function_based_template则在customTemplates
中定义。
- apiOptions 可选,配置引用生成的雪碧图的一些细节
– cssImageRef 配置在样式文件中引用雪碧图的路径
具体来说,虽然target.img已经配置好了生成的雪碧图路径,但是,生成的样式文件
_sprite.scss
中,还需要通过scss引用雪碧图,比如background-image: url(../../images/sprite/sprite.png)
,因此需要使用apiOptions.cssImageRef设置background-image引用雪碧图的路径。
- customTemplates 可选,配置生成样式文件的样式模板
具体来说,我们在
target.css
选项中,将format设置为“function_based_template”,那么,最终生成的样式文件中的内容将是样式模板function_based_template定义的形式。function_based_template便需要在customTemplates 中定义。
以上案例中,function_based_template的值是templateFunction,那么将按templateFunction中的返回值生成样式内容。即生成的全是.icon {…} .icon-N{…}的形式。
案例中之所以这样设计,是为了方便直接在html中使用<i class='icon icon-N'></i>
的形式,这样将直接加载出对应的图标,其中N是图标的名称。
- spritesmithOptions 可选, spritesmith的配置。
spritesmith是另一个插件,webpack-spritesmith使用了spritesmith。spritesmithOptions 选项用来配置在spritesmith中可用的那些配置。
– algorithm 配置生成雪碧图的算法。比如设为“binary-tree”,则雪碧图看起来正正方方,还可以设为top-down、left-right、diagonal、alt-diagonal,不同值之间拼接小图标的方式不同,因此最终的雪碧图形状不同。
– padding 配置雪碧图中小图标之间的间距,可根据需要设置。
Vue-cli3.0下的雪碧图插件webpack-spritesmith配置方法的更多相关文章
- 响应式下的雪碧图解决方案 - 活用background-size / background-position
一.概述 在传统的居中布局时,我们常用background-position这个属性来进行雪碧图的定位,在减少数据量的同时,保证准确定位.在移动端使用越来越重的现在,以往的传统定位,已经无法达到目的, ...
- 用FSM一键制作逐帧动画雪碧图 Vue2 + webpack
因为工作需要要将五六十张逐帧图拼成雪碧图,网上想找到一件制作工具半天没有找到,就自己用canvas写了一个. 写成之后就再没有什么机会使用了,因此希望有人使用的时候如果遇到bug了能及时反馈给我. 最 ...
- webpack使用雪碧图插件
1.先安装插件 npm install --save-dev webpack-spritesmith 2.配置webpack 配置之前 先引入var SpritesmithPlugin = requi ...
- 前端-如何用gulp快速搭建项目(sass预编译,代码压缩,css前缀,浏览器自动刷新,雪碧图合成)
一:gulp优点: 易于使用 通过代码优于配置的策略,Gulp 让简单的任务简单,复杂的任务可管理: 插件高质 Gulp 严格的插件指南确保插件如你期望的那样简洁高质得工作. 构建快速 利用 Node ...
- V4.0到来了,css雪碧图生成工具4.0更新啦
V3.0介绍 http://www.cnblogs.com/wang4517/p/4476758.html V4.0更新内容 V4.0下载地址:http://download.csdn.net/det ...
- vue 整合雪碧图功能
1.通过命令新建一个vue项目 环境要求: 安装有 Node.js. vue. vue-cli . 创建项目: vue init webpack tx_demo cd tx_demo 进入项目,下载依 ...
- css sprite,css雪碧图生成工具V3.0更新
V3.0主要改进 1.增加了单独添加单张图片以及删除单张图片的功能 2.增加了生成.sprite文件用以保存雪碧图信息 3.增加了打开.sprite文件功能 什么是css sprite CSS spr ...
- position:absolute 按钮左右分布:left:0 和 right:0 以及雪碧图
问题:把两个a标签按钮 垂直居中,并且分别把两个按钮放在水平左右两边顶部1,祖父元素设定:position:relative2,把.arrow 设定上下垂直居中 position:absolute; ...
- vue-cli3使用webpack-spritesmith配置雪碧图
一.背景问题 项目中如果有大量的小图标,如果不使用阿里的iconfont.UI给一个加一个,加一个引用一个,每个图标虽然很小,但是也是一次请求,每次请求都是消耗性能资源的. 二.解决思路 使用webp ...
随机推荐
- 微信小程序页面传值详解
我们知道,在微信小程序中,从一个页面转到另一个页面,一般情况下可以通过navigate或redirect时候的url来携带参数,然后在目标页面的onLoad函数参数中获取这些url参数.例如: / ...
- thinkphp后端开发ajax接口开发测试
数据自动填充,Firefox的网络查看JSON数据,查错. 同时,用getLastSql函数查询,并且开启日志文件记录网页执行的全过程,还可以用thinkPHP内置的trace的跟踪. 谁有更好地方法 ...
- 【电商】性能测试网站搭建:XAMPP1.8+DBShop1.3
1.安装准备 1.1软件版本 XAMPP的版本:XAMPP 1.8.2 DBShop的版本:DBShop 1.3 1.2.安装环境 我的环境:win10 win7,win10都可以运行的,安装步骤 ...
- ESLint如何配置
1.简介 通过用 ESLint 来检查一些规则,我们可以: 统一代码风格规则,如:代码缩进用几个空格:是否用驼峰命名法来命名变量和函数名等. 减少错误, 如:相等比较必须用 === ,变量在使用前必须 ...
- 2017蓝桥杯兴趣小组(C++C组)
原题:兴趣小组 为丰富同学们的业余文化生活,某高校学生会创办了3个兴趣小组(以下称A组,B组,C组).每个小组的学生名单分别在[A.txt],[B.txt]和[C.txt]中.每个文件中存储的是学生的 ...
- 下载SVN项目代码
1. 到SVN根目录右键选中SVN Checkout...
- [ddt02篇]十年测试老鸟帮您解析:ddt结合txt,excel,csv,mysql实现自动化测试数据驱动
一.前言: 阅读此文之前请先阅读: [ddt01篇]十年测试老鸟帮您解析:ddt数据驱动入门基础应用:https://www.cnblogs.com/csmashang/p/12679448.html ...
- PHPDocumentor2.8.5 安装,使用及快速上手
PHPDocumentor当前版本是phpDocumentor-2.8.5.tgz 关于PHPDocumentor有什么用,还有其历史,我就不介绍了,直接进入正题.老版本的叫PHPDoc,从1.0开始 ...
- golang开发:环境篇(七) Go mod 使用
Glide用的好好的,为什么要使用Modules 在 Go 1.11 中 ,官方加入package management tool,称为Go Modules.Go mod 没有出现之前,用的最多的包管 ...
- 自动补全、回滚!介绍一款可视化 sql 诊断利器
Yearning简介 ================= Yearning MYSQL 是一个SQL语句审核平台.提供查询审计,SQL审核等多种功能,支持Mysql,可以在一定程度上解决运维与开发之间 ...