From ed19421a1086bd3512cb1fe86ba24d2ae498d2ff Mon Sep 17 00:00:00 2001 From: sunfutao <810479416@qq.com> Date: Fri, 22 May 2020 18:16:19 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=B8=85=E9=99=A4=E6=B3=A8?= =?UTF-8?q?=E9=87=8A=E4=BB=A3=E7=A0=81=20=E6=94=AF=E6=8C=81sass=EF=BC=8Cle?= =?UTF-8?q?ss?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.CN.md | 50 +++++++++++++---- README.md | 53 +++++++++++++----- demo/loaders/sprite-smith-loader.js | 4 +- demo/resource/sprites/1590130839494_smith.png | Bin 11008 -> 0 bytes demo/resource/sprites/1590130873790_smith.png | Bin 11008 -> 0 bytes demo/webpack.config.js | 2 +- dist/index.js | 4 +- package.json | 2 +- 8 files changed, 84 insertions(+), 31 deletions(-) delete mode 100644 demo/resource/sprites/1590130839494_smith.png delete mode 100644 demo/resource/sprites/1590130873790_smith.png diff --git a/README.CN.md b/README.CN.md index 46130bf..b0e10e2 100644 --- a/README.CN.md +++ b/README.CN.md @@ -1,9 +1,3 @@ -

sprite-smith-loader

@@ -11,6 +5,8 @@ ![image](https://img.shields.io/badge/webpack-%5E4.0.0-blue) ## 介绍 sprite-smith-loader是一款自动生成雪碧图工具,你可以在webpack中使用它,它会自动生成雪碧图并修改相应的css代码。 + +支持**CSS**、**SASS**、**LESS**。 ## 安装 下载sprite-smith-loader @@ -18,7 +14,7 @@ sprite-smith-loader是一款自动生成雪碧图工具,你可以在webpack中 npm install --save-dev sprite-smith-loader ``` ## 配置 -将loader添加到webpack的配置中,必须放在css-loader之后 +将loader添加到webpack的配置中,必须放在css-loader之后,别忘了添加file-loader或url-loader处理图片路径。 **webpack.config.js** @@ -26,17 +22,47 @@ npm install --save-dev sprite-smith-loader module.exports = { module: { rules: [ - { - test: /\.css$/i, - use: ['style-loader', 'css-loader','sprite-smith-loader'], - }, + { + test: /\.(png|jpe?g|gif)$/i, + loader: 'file-loader', + options: { + outputPath: 'images', + }, + }, + { + test: /\.css$/i, + use: ['style-loader', 'css-loader','sprite-smith-loader'], + } + ], + }, +}; +``` +配合SASS + +``` +module.exports = { + module: { + rules: [ + { + test: /\.(png|jpe?g|gif)$/i, + loader: 'file-loader', + options: { + outputPath: 'images', + }, + }, + { + test: /\.(sass|scss|css)/, + use: ['style-loader', 'css-loader','sprite-smith-loader',"sass-loader"], + } ], }, }; + ``` + ## 使用 -修改你的css文件 +修改你的 CSS/SCSS/SASS/LESS 文件 ``` .my_bg_1{ diff --git a/README.md b/README.md index cb2c352..a4e6f56 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,3 @@ -

sprite-smith-loader

@@ -13,13 +7,17 @@ :rocket: [中文文档点这里](https://github.com/sunft1996/sprite-smith-loader/blob/master/README.CN.md/) ## Introduce Sprite Smith loader is a tool for automatically generating CSS Sprites. You can use it in webpack. It will automatically generate CSS Sprites and modify the corresponding CSS code. + +supports **CSS**、**SASS**、**LESS**. ## Getting Started To begin, you'll need to install sprite-smith-loader: ``` -npm install --save-dev css-loader +npm install --save-dev sprite-smith-loader ``` -Then add the plugin to your webpack config. For example: +Then add the plugin to your webpack config. And don't forget to add the file-loader or url-loader. + +For example: **webpack.config.js** @@ -27,17 +25,46 @@ Then add the plugin to your webpack config. For example: module.exports = { module: { rules: [ - { - test: /\.css$/i, - use: ['style-loader', 'css-loader','sprite-smith-loader'], - }, + { + test: /\.(png|jpe?g|gif)$/i, + loader: 'file-loader', + options: { + outputPath: 'images', + }, + }, + { + test: /\.css$/i, + use: ['style-loader', 'css-loader','sprite-smith-loader'], + }, + ], + }, +}; +``` +with SaSS + +``` +module.exports = { + module: { + rules: [ + { + test: /\.(png|jpe?g|gif)$/i, + loader: 'file-loader', + options: { + outputPath: 'images', + }, + }, + { + test: /\.(sass|scss|css)/, + use: ['style-loader', 'css-loader','sprite-smith-loader',"sass-loader"], + } ], }, }; + ``` ## Usage -Modify your CSS file +Modify your CSS/SCSS/SASS/LESS file ``` .my_bg_1{ height: 100px; diff --git a/demo/loaders/sprite-smith-loader.js b/demo/loaders/sprite-smith-loader.js index c40a9d3..a7d020c 100644 --- a/demo/loaders/sprite-smith-loader.js +++ b/demo/loaders/sprite-smith-loader.js @@ -8,9 +8,9 @@ module.exports = function (source) { let outputName = new Date().getTime() + '_smith.png'; // 清除css中的注释 - const cleanSource = source.replace(/\/\*[\w\W]*\*\//g, '') - + const cleanSource = source.replace(/(\/\*.*\*\/)|\/\/.*/g, '') let imgs = cleanSource.match(/url\(.+_sprite.+\)/g); + if(!imgs) return cleanSource; const callback = this.async(); diff --git a/demo/resource/sprites/1590130839494_smith.png b/demo/resource/sprites/1590130839494_smith.png deleted file mode 100644 index 7dd9b8b7ac149e88c608cc500e480475d052365b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11008 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