由于之前项目webpack打包后,css、less、sass、stylus会合并到js中,不太符合规范。所以我们要把css、less、sass、stylus分离出来,单独打包成一个css文件。
一、配置loader
cnpm install css-loader post-loader autoprefixer --save-dev // post-loader autoprefixer用于自动添加前缀
cnpm install less less-loader --save-dev // 安装less-loader
cnpm install node-sass sass-loader -D // 安装sass-loader
cnpm i stylus stylus-loader -D // 安装stylus-loader
在webpack.config.js中配置loader(注意loader先后顺序)
rules: [
{
test: /\.css$/,
use:[ // 由后向前加载
MiniCssExtractPlugin.loader,
{loader: 'css-loader'},
{loader: "postcss-loader"}
]
},
{
test: /\.less$/,
use:[
MiniCssExtractPlugin.loader,
{loader: 'css-loader'},
{loader: "postcss-loader"},
{loader: 'less-loader'}
]
},
{
test: /\.sass$/,
use: [
MiniCssExtractPlugin.loader,
{loader: 'css-loader'},
{loader: "postcss-loader"},
{loader: 'sass-loader'}
]
},
{
test: /\.styl$/,
use: [
MiniCssExtractPlugin.loader,
{loader: 'css-loader'},
{loader: "postcss-loader"},
{loader: 'stylus-loader'}
]
}
]
},
这里要使用postcss还需要在根目录添加postcss.config.js
module.exports = {
plugins: [
require('autoprefixer') // 自动补充前缀
]
}
上面的MiniCssExtractPlugin见下面.
二、分离css
安装mini-css-extract-plugin
cnpm i mini-css-extract-plugin -D
在webpack.config.js配置mini-css-extract-plugin
const MiniCssExtractPlugin = require('mini-css-extract-plugin'); // 分离css
module.export = {
...
plugins: [
new MiniCssExtractPlugin({
filename: '../css/[name].css'
})
],
...
}
三、CSS压缩去重
安装optimize-css-assets-webpack-plugin用于压缩去重及合并。
cnpm i optimize-css-assets-webpack-plugin -D
在webpack.config.js配置optimize-css-assets-webpack-plugin
plugins:[
...
new OptimizeCssAssetsPlugin({
assetNameRegExp: /\.css$/g,
cssProcessor: require('cssnano'),
cssProcessorPluginOptions: {
preset: [
'default',
{ discardComments: { removeAll: true } }
],
},
canPrint: true
})
]