一、背景问题

项目中如果有大量的小图标,如果不使用阿里的iconfont。UI给一个加一个,加一个引用一个,每个图标虽然很小,但是也是一次请求,每次请求都是消耗性能资源的.

二、解决思路

使用webpack-spritesmith可以将所有的icon小图标整合成一张图片。每次都只会请求一次,同时还能自动生成定位样式,对于都是同尺寸的小图标,直接可以使用。

三、废话少说,直接来code

1、我是使用vue-cli3配置这个webapck的插件的。如果使用cli2的网上也很多,自行查找

2、查阅资料:(npm官网 github的readme)

(1)https://www.npmjs.com/package/webpack-spritesmith

(2)https://github.com/mixtur/webpack-spritesmith

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>

转载于:https://www.cnblogs.com/guangixn/p/10682131.html

vue-cli3使用webpack-spritesmith配置雪碧图相关推荐

  1. Vue-cli 2在webpack内使用雪碧图(响应式)

    先执行install cnpm install webpack-spritesmith 文件位置 build\webpack.dev.conf.js 添加内容: const SpritesmithPl ...

  2. gulp代码压缩和制作雪碧图

    安装nodejs gulp是基于nodejs,需要安装nodejs 在 [ nodejs官网 ]下载并安装nodejs 查看nodejs版本 安装完nodejs后,在命令行中(window + r 输 ...

  3. 雪碧图PHP,Webpack中雪碧图插件使用详解

    背景 在开发过程中,我们需要用到很多图标,这些图标的大小不是很大,但是每次需要向服务器发送请求,从而加重服务器的负担,尤其是当网站处于高访问量的情况下或网络不稳定的时候,服务器性能会明显下降.这种情况 ...

  4. webpack原理篇(六十二):实战开发一个自动合成雪碧图的loader

    说明 玩转 webpack 学习笔记 支持的语法 对样式里面图片引用后面加 __sprite 进行图片合并 如何将两张图片合成一张图片? 使用 spritesmith https://github.c ...

  5. webpack雪碧图生成

    原文链接:http://dopro.io/webpack-sprites.html 前言 在HTTP/2.0还没有普及的现在,css sprite(雪碧图)仍是前端工程化中必备的一环,而随着webpa ...

  6. 手把手教你webpack3(15)插件之雪碧图插件(WEBPACK-SPRITESMITH配置简述)

    WEBPACK-SPRITESMITH配置简述 前注: 文档全文请查看 根目录的文档说明. 如果可以,请给本项目加[Star]和[Fork]持续关注. 有疑义请点击这里,发[Issues]. DEMO ...

  7. Webpack3之雪碧图插件(WEBPACK-SPRITESMITH配置简述)

    WEBPACK-SPRITESMITH配置简述 前注: 文档全文请查看 根目录的文档说明. 如果可以,请给本项目加[Star]和[Fork]持续关注. 有疑义请点击这里,发[Issues]. DEMO ...

  8. html网站雪碧图素材,webpack雪碧图实现(webpack管理小图标素材)

    雪碧图也叫CSS精灵, 是一CSS图像合成技术,这里介绍webpack实现雪碧图 这是我的文件目录: // 在上个实例项目上增加了icons文件夹: // dist/sprites/目录是后面执行we ...

  9. gulp将多张小图自动合成雪碧图

    最近一直在做移动端的改版项目,做之前老大就跟我说了好几次,说这次改版一定要用雪碧图减少一个页面的图片的请求次数,能加快页面的加载速度就一定要加快,我说可以.因为之前的项目开发时间过短,也没有时间去慢慢 ...

最新文章

  1. 了解Hololens2的硬件信息
  2. 【Lolttery】项目开发日志 (五)目标dubbox,前进
  3. linux 文本处理 awk 几个特殊的内置变量
  4. getOutputStream() has already been called for this response
  5. HTML测试版本号,版本号
  6. 消息中间件选型分析——从Kafka与RabbitMQ的对比来看全局
  7. tailf、tail -f、tail -F 指令
  8. imu_utils标定imu问题解决
  9. Unity GeometryShader(从一个线框渲染的例子开始)
  10. QuickStart系列:docker部署之Gitlab本地代码仓库
  11. UI设计干货素材|聊天APP界面,临摹学习进步快
  12. 数据库原理(一)—— 关系代数
  13. ASP.NET中使用IFRAME建立类Modal窗口
  14. wps2000老版本 v3.02.99
  15. 三维视觉、SLAM方向全球顶尖实验室汇总
  16. linux 统计文件字节和行数,Linux命令-统计文件中的字节数、字数、行数:wc
  17. 北漂小斌和你分享古建筑斗拱木构件大样拆分图画法
  18. 靶基因高通量测序建库流程介绍
  19. 香港资深艺人沈殿霞病逝 享年60岁(图)
  20. 高考助力海报|有哪些优秀的高考助力文案?

热门文章

  1. BGI-College生信入门——5、Linux下的软件安装与Vim编辑器
  2. Final Cut Pro资源库占用内存太大如何释放磁盘空间?
  3. 【无标题】java核心资料
  4. 【cocos creator实战】记录微信小游戏登录授权的开发-小游戏审核
  5. 深信服校园招聘c/c++ 软件开发A卷--菜鸡落泪
  6. 一起来探索从双击程序到开始运行期间计算机经历了哪些过程
  7. 【SCIR笔记】文档级事件抽取简述
  8. java outer什么意思_java里面outer、 inner是什么意思
  9. 超简单安装Win10!不用U盘!保留原应用快速纯净!安装Window10系统,Windows7升级到Windows10。(亲测有效)
  10. 【论文复刻】企业数字化转型与资本市场表现——来自股票流动性的经验证据(2007-2021年数据)