前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >webpack生成雪碧图案例

webpack生成雪碧图案例

作者头像
前端小鑫同学
发布2022-12-25 11:00:16
发布2022-12-25 11:00:16
60400
代码可运行
举报
运行总次数:0
代码可运行
使用到的插件是: 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
配置输出模板:
代码语言:javascript
代码运行次数:0
运行
复制
// 定义输出模板函数
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插件:
代码语言:javascript
代码运行次数:0
运行
复制
// 配置插件
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
  },
})
复制代码
完整配置文件:
代码语言:javascript
代码运行次数:0
运行
复制
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
            },
        })
    ]
};
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-04-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 使用到的插件是: webpack-spritesmith
  • 依赖项:
  • 预设命令:
  • 配置webpack.config.js
    • 配置输出模板:
  • 配置SpritesmithPlugin插件:
  • 完整配置文件:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档