webpack生成雪碧图案例

简介: webpack生成雪碧图案例

使用到的插件是: webpack-spritesmith


依赖项:


  1. "webpack-spritesmith": "^1.1.0"
  2. "webpack": "^4.29.6"
  3. "webpack-cli": "^3.3.0"


预设命令:


  1. "build:dev": "npx webpack --mode development"
  2. "build:prod": "npx webpack --mode production"


配置webpack.config.js


配置输出模板:
// 定义输出模板函数
const templateFunction = function (data) {
    const 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)
    const perSprite = data.sprites.map(function (sprite) {
        return '.ico-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;
};


配置SpritesmithPlugin插件:


// 配置插件
new SpritesmithPlugin({
  // 指定处理的图片来源
  src: {
    // 目录
    cwd: path.resolve(__dirname, './src/ico'),
    // 图片类型
    glob: '*.png'
  },
  // 生成的文件夹路径
  target: {
    image: path.resolve(__dirname, './dist/sprite.png'),
    css: [
      [path.resolve(__dirname, './dist/sprite.css'), {
        format: 'function_based_template'
      }]
    ]
  },
  apiOptions: {
    cssImageRef: "sprite.png"
  },
  spritesmithOptions: {
    // 设置图片间的内边距
    padding: 20
  },
  // 自定义生成模板
  customTemplates: {
    'function_based_template': templateFunction
  },
})


完整配置文件:


const path = require('path');
const SpritesmithPlugin = require('webpack-spritesmith');
// 定义输出模板函数
const templateFunction = function (data) {
    const 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)
    const perSprite = data.sprites.map(function (sprite) {
        return '.ico-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;
};
// webpack导出配置信息
module.exports = {
    // 入口和出口此场景可忽略,编译抛error才加的不影响
    entry: path.resolve(__dirname, './src/index.js'),
    output: {
        path: path.resolve(__dirname, './src/.ignore'),
        filename: 'index.js',
    },
    resolve: {
        modules: ["node_modules", "spritesmith-generated"]
    },
    plugins: [
        // 配置插件
        new SpritesmithPlugin({
            // 指定处理的图片来源
            src: {
                // 目录
                cwd: path.resolve(__dirname, './src/ico'),
                // 图片类型
                glob: '*.png'
            },
            // 生成的文件夹路径
            target: {
                image: path.resolve(__dirname, './dist/sprite.png'),
                css: [
                    [path.resolve(__dirname, './dist/sprite.css'), {
                        format: 'function_based_template'
                    }]
                ]
            },
            apiOptions: {
                cssImageRef: "sprite.png"
            },
            spritesmithOptions: {
                // 设置图片间的内边距
                padding: 20
            },
            // 自定义生成模板
            customTemplates: {
                'function_based_template': templateFunction
            },
        })
    ]
};



相关文章
|
3月前
|
缓存 资源调度 JavaScript
万字总结webpack实战案例配置
该文章总结了Webpack在实际项目中的配置案例,包括如何配置多页面应用、使用高级插件、优化构建速度及减少输出文件大小等方面的实战经验。
|
前端开发
webpack原理篇(六十二):实战开发一个自动合成雪碧图的loader
webpack原理篇(六十二):实战开发一个自动合成雪碧图的loader
101 0
webpack原理篇(六十二):实战开发一个自动合成雪碧图的loader
|
缓存 JavaScript 编译器
【Vue五分钟】五分钟了解webpack实战配置案例详情
接下来讲怎么打包类库文件 library(里面有几个 JS 文件, index.js 将这些文件里面的方法导出给其它引入这个库的文 件使用),当然了这个肯定不能直接被使用,还是需要安装 配置 webpack 什么的。
【Vue五分钟】五分钟了解webpack实战配置案例详情
|
缓存 资源调度 JavaScript
万字总结webpack实战案例配置
在前面的两篇文章中,我们讲解了 webpack 的入门知识。但是呢,入门知识了解了之后,总得应用到具体的案例当中来。 因此,在下面的这篇文章中,将带领大家来了解关于 webpack 的一些实战案例配置,包括第三方库、 PWA 、 ts 的打包配置,以及 WebpackDevServer 的进阶操作,还有需重点掌握的,关于 webpack 如何做性能优化处理这个问题。
万字总结webpack实战案例配置
|
JSON 编解码 监控
【Webpack】Webpack4.x 常用操作 | 案例 | 相关构建工具 下
【Webpack】Webpack4.x 常用操作 | 案例 | 相关构建工具
160 0
【Webpack】Webpack4.x 常用操作 | 案例 | 相关构建工具 下
|
前端开发 JavaScript
【Webpack】Webpack4.x 常用操作 | 案例 | 相关构建工具 上
【Webpack】Webpack4.x 常用操作 | 案例 | 相关构建工具
155 0
【Webpack】Webpack4.x 常用操作 | 案例 | 相关构建工具 上
|
3月前
|
JavaScript
webpack打包TS
webpack打包TS
138 60
|
2月前
|
缓存 前端开发 JavaScript
Webpack 打包的基本原理
【10月更文挑战第5天】
|
2月前
|
前端开发 JavaScript
ES6模块化和webpack打包
【10月更文挑战第5天】
|
2月前
|
缓存 前端开发 JavaScript
深入了解Webpack:模块打包的革命
【10月更文挑战第11天】深入了解Webpack:模块打包的革命
下一篇
DataWorks