使用到的插件是: webpack-spritesmith
依赖项:
- "webpack-spritesmith": "^1.1.0"
- "webpack": "^4.29.6"
- "webpack-cli": "^3.3.0"
预设命令:
- "build:dev": "npx webpack --mode development"
- "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; |
| }; |
| |
| |
| module.exports = { |
| |
| 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 |
| }, |
| }) |
| ] |
| }; |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)