vue-cli3使用webpack-spritesmith配置雪碧图
一、背景问题
项目中如果有大量的小图标,如果不使用阿里的iconfont。UI给一个加一个,加一个引用一个,每个图标虽然很小,但是也是一次请求,每次请求都是消耗性能资源的.
二、解决思路
使用webpack-spritesmith可以将所有的icon小图标整合成一张图片。每次都只会请求一次,同时还能自动生成定位样式,对于都是同尺寸的小图标,直接可以使用。
三、废话少说,直接来code
1、我是使用vue-cli3配置这个webapck的插件的。如果使用cli2的网上也很多,自行查找
2、查阅资料:(npm官网 github的readme)
3、来来。配置走起。
(1)假装你的vue-cli3脚手架已经搭建起来了,在项目根目录,新建一个vue.config.js的文件(webpack就是在这里配置。cli3不建议修改webapck,但是如果需要修改,在这里可以覆盖默认的配置)
(2)npm install webpack-spritesmith --save
(3)在vue.config.js里面写东西啊
const path = require('path') //引入node模块,一会要操作文件,输入,生成,输出都需要这玩意。
const SpritesmithPlugin = require('webpack-spritesmith'); // 主角,必须引入。要不然咋用
/* 这里是我们自己修改的模板样式,webpack,会自动生成一个sprite.css的样式,有时候生成的不满意,
我们可以在这里修改,可以自己打印一下 data里面的参数,看着就会大概明白(先看下面的配置,最后看这个模板)
*/
var templateFunction = function (data) {
var shared = '.icon { background-image: url(I);background-size: Wpx Hpx;}'.replace('I', data.sprites[0].image).replace('W', data.spritesheet.width)
.replace('H', data.spritesheet.height)
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 = {
// webpack的配置入口可以打印这个config。可以看到webpack的配置项
configureWebpack: config => {
/*
细节坑。文档里面写着 需要resolve,引入图片生成的位置,
不加这行会报错。因为github,Readme里面有这句话
resolve contains location of where generated image is
(要把生成的地址resolve到modules里面。不写就错)
一定要加,血的教训啊
*/
config.resolve.modules = ['node_modules', './src/assets/images']
// 定义一个插件数组。用来覆盖,在里面使用我们的主角
const Plugins = [
new SpritesmithPlugin({
/*
目标小图标,这里就是你需要整合的小图片的老巢。
现在是一个个的散兵,把他们位置找到,合成一个
*/
src: {
cwd: path.resolve(__dirname, './src/assets/icon'),
glob: '*.png'
},
// 输出雪碧图文件及样式文件,这个是打包后,自动生成的雪碧图和样式,自己配置想生成去哪里就去哪里
target: {
image: path.resolve(__dirname, './src/assets/images/sprite.png'),
css: [
[path.resolve(__dirname, './src/assets/css/sprite.scss'), {
// 引用自己的模板
format: 'function_based_template'
}],
]
},
// 自定义模板入口,我们需要基本的修改webapck生成的样式,上面的大函数就是我们修改的模板
customTemplates: {
'function_based_template': templateFunction,
},
// 样式文件中调用雪碧图地址写法(Readme这么写的)
apiOptions: {
cssImageRef: '~sprite.png'
},
// 让合成的每个图片有一定的距离,否则就会紧挨着,不好使用
spritesmithOptions: {
padding: 20
}
})
]
// config里面,覆盖掉以前的,要不然不好使
config.plugins = [...config.plugins, ...Plugins]
}
}
四、组件里面怎么使用
1.根据你的配置。重新npm run serve以后。会在你配置的文件 里面生成合成图sprite.png 和 sprite.css(或者其他格式)
2.在sprite.css里面已经通过webpack的机制,引入了sprite.png,所以组件里面直接在style部分直接@import'../xx/sprite/.css'就可以了
3.根据模板的要求,我们在html使用
<span class="icon icon-每个小图的名字"></sapn>
五、几个问题
1.css模板配置(就是最上面的大函数),webapck自己官方代码 全是最基础的。没有background-size的设置,这样生成的图大小是没有规定尺寸的。所以引用显示会很有问题 。所以我在后边加了replace('W', data.spritesheet.width) .replace('H', data.spritesheet.height)
var templateFunction = function (data) {
var shared = '.icon { background-image: url(I);background-size: Wpx Hpx;}'.replace('I', data.sprites[0].image)
.replace('W', data.spritesheet.width)
.replace('H', data.spritesheet.height)
这样这个合成的大图尺寸就固定了,小图定位就很准确, 里面所有不清楚的参数,打印data,看一下就明白了
2.这句代码。在cli2 里面很好找,cli3里面因为我对webpack的把不熟悉,打印了config才找到,才加上。找不到的配置,就打印config,
config.resolve.modules = ['node_modules', './src/assets/images']
3.在组建里面使用,前两个是固定写法,否则不生效,最后可以继续定义样式名,修改样式
<span class="icon icon-小图名字 自定义名字"></span>
vue-cli3使用webpack-spritesmith配置雪碧图的更多相关文章
- Vue-cli在webpack内使用雪碧图(响应式)
先执行install cnpm install webpack-spritesmith 文件位置 build\webpack.dev.conf.js 添加内容: const SpritesmithPl ...
- 用 gulp.spritesmith 自动化雪碧图
一.安装nodejs之后,要设置两个环境变量 在 计算机右击属性---高级系统设置---高级---环境变量 打开窗口 新建2个环境变量,它们的值分别是nodejs根目录下的node_modules路径 ...
- vue 整合雪碧图功能
1.通过命令新建一个vue项目 环境要求: 安装有 Node.js. vue. vue-cli . 创建项目: vue init webpack tx_demo cd tx_demo 进入项目,下载依 ...
- Vue-cli3.0下的雪碧图插件webpack-spritesmith配置方法
在前端项目中,为了减少对图片的请求次数,一般而言需要进行雪碧图的配置.即将多张小图标合并成一张图片,这样页面中的小图标都在一张图片上,只需请求一张图片,就可以通过CSS设置各个小图标的显示,利于节省带 ...
- 关于vue-eslint自动补全代码,以及自动生成雪碧图
一.配置eslint module.exports={ "printWidth": 240, //一行的字符数,如果超过会进行换行,默认为80 "tabWidth&quo ...
- webpack使用雪碧图插件
1.先安装插件 npm install --save-dev webpack-spritesmith 2.配置webpack 配置之前 先引入var SpritesmithPlugin = requi ...
- 用FSM一键制作逐帧动画雪碧图 Vue2 + webpack
因为工作需要要将五六十张逐帧图拼成雪碧图,网上想找到一件制作工具半天没有找到,就自己用canvas写了一个. 写成之后就再没有什么机会使用了,因此希望有人使用的时候如果遇到bug了能及时反馈给我. 最 ...
- gulp将多张小图自动合成雪碧图
最近一直在做移动端的改版项目,做之前老大就跟我说了好几次,说这次改版一定要用雪碧图减少一个页面的图片的请求次数,能加快页面的加载速度就一定要加快,我说可以.因为之前的项目开发时间过短,也没有时间去慢慢 ...
- vue-cli3 使用雪碧图
//vue.config.js const path = require("path"); const SpritesmithPlugin = require("webp ...
随机推荐
- Linux 手册惯用的节名
linux 手册将
- Java 基础:认识&理解关键字 native 实战篇
Writer:BYSocket(泥沙砖瓦浆木匠) 微博:BYSocket 豆瓣:BYSocket 泥瓦匠初次遇见 navicat 是在 java.lang.Object 源码中的一个hashCode方 ...
- CSS3属性上调
一.为什么使用CSS 1.有效的传递页面信息 2.使用CSS美化过的页面文本,使页面漂亮.美观,吸引用户 3.可以很好的突出页面的主题内容,使用户第一眼可以看到页面主要内容 4.具有良好的用户体验 二 ...
- CodeForces #549 Div.2 C Queen
题目 水题,dfs #include <iostream> #include <stdio.h> #include <algorithm> using namesp ...
- spring boot application.properties 属性详解
2019年3月21日17:09:59 英文原版: https://docs.spring.io/spring-boot/docs/current/reference/html/common-appli ...
- MarkDown语言
参考: 参考:https://typora.io/ 参考:https://caret.io/ Markdown是一种轻量级标记语言,创始人为約翰·格魯伯(英语:John Gruber). 它允许人们“ ...
- vlan分类简易解释
注:出自http://wushank.blog.51cto.com/3489095/1305510 收报文: Acess端口1.收到一个报文,判断是否有VLAN信息:如果没有则打上端口的PVID,并进 ...
- MongoDB Schema Design
Normalization: ...... Relationships: One-to-One relationship: 1-to-many: many-to-many:
- php 数据库乱码。。。php 移动临时文件
数据库乱码,三个位置 处理好不会乱码 第一前台,传到后台: 第二后台,传到数据库: 第三数据库,存入数据库: 详解 https://www.cnblogs.com/zhoujinyi/p/46188 ...
- Spark入门到精通--(第九节)环境搭建(Hive搭建)
上一节搭建完了Hadoop集群,这一节我们来搭建Hive集群,主要是后面的Spark SQL要用到Hive的环境. Hive下载安装 下载Hive 0.13的软件包,可以在百度网盘进行下载.链接: h ...