提取css成单独文件
- 原因
不提取css文件,打包时会放在js文件中,不仅会增加js文件体积,使js文件下载时间延长,而且进行解析js文件往往都是在dom树生成之后,就增加了延迟,影响渲染速度,用户体验差
- 好处
将css文件单独提取出来,就可以先在页面的最前面引入这个单独的css文件,浏览器先解析css文件就会生成cssom从而与domtree生成渲染树,从而以最快速度渲染出页面。
安装:npm i mini-css-exreact-plugin -D
配置:
module.exports ={
...
module:{
rules:[
{
test:/\.css$/,
use:[
MiniCssExtractPlugin.loader,
'css-loader'
]
}
]
}
plugins:{
new MiniCssExtractPlugin({
template:'./src/built.css'
})
}
}
公共样式复用
const MiniCssRxtractPlugin = require('mini-css-extract-plugin')
const commonCssLoader = {
MiniCssExtractPlugin.loader,
'css-loader',
{
loader:'postcss-loader',
options:{
ident:'postcss',
plugins:() => {
require('postcss-preset-env')()
}
}
}
}
module.exports = {
...
module:{
rules:[
{
test:/\.css$/,
use:[...commonCssLoader]
},
{
test:/\.less$/,
use:[...commonCssLoader,'sass-loader']
}
]
},
plugins:[
new MiniCssExtractPlugin({
filename:'css/built.css'
})
]
}
css 压缩
const OptimizeCssAssetsWebpackPlugin = require('optimize-css-assets-webpack-plugin')
module.exports ={
...
plugins:[
new OptimizeCssAssetsWebpackPlugin
]
}
css兼容性处理
- 原因:
系统需要兼容多个浏览器,就会在css文件添加-webkit-等厂商前缀。由于webpack无法识别这些前缀,所以引入postcss-loader,这个可以自动帮我们添加厂商前缀的信息。
安装:npm install postcss-loader postcss-preset-env -D
module.exports = {
...
module:{
rules:[
{
test:/\.css$/,
use:[
MiniCssExtractPlugin.loader,
'css-loader',
{
loader:'postcss-loader',
options:{
ident:'postcss',
plugins:() =>[
require('postcss-preset-env')()
]
}
}
]
}
]
}
}
package.json中的配置
{
"browserslist":{
"development":[
"last 1 chrome version",
],
"production":[
">0.2%",
"not dead",
"not op_mimi all"
]
}
}
js语法检查eslint
安装:npm i eslint-config-airbnb-base eslint-plugin-import eslint -D
配置:
module.exports = {
...
module:{
rules:[
{
test:/\.js$/,
exclude:/node_modules/,
enforce:'pre',
loader:'eslint-loader',
options:{
fix:true
}
},
{
test:/\.js$/,
exclude:/node_modules/,
loader:'babel-loader',
options:{
presets:[
'@babel/preset-env',
{
useBuiltIns:'usage',
corejs:{version:3},
targets:{
chrome:'60'
}
}
]
}
}
]
}
}
package.json中eslintConfig中配置
"eslintConfig":{
"extends":"airbnb-base"
}
排除其他文件
module.exports ={
...
rules:[
{
exclude:/\.(js|css|less|html|jpg|png|gif)/,
loader:'file-loader',
options:{
outputPath:'media'
}
}
]
}