module.exports = {
...
mode:'development'//'production'
...
}
复制代码
{
'scripts':{
'build':'webpack --config webpack.prod.js',//生产环境命令
'dev':'webpack-dev-server --config webpack.dev.js --open'//开发环境命令
}
}
复制代码
和整个项目的构建相关,只要项目中的文件有修改,整个项目构建的hash值就会发生改变css
不一样的entry会生成不一样的chunkhash值html
const path = require('path')
module.exports = {
entry: {
index:'./src/main.js',
search:'./src/search.js'
},
output: {
path:path.join(__dirname,'dist')
filename:'[name][chunkhash:8].js'
}
}
复制代码
ERROR in chunk search [entry]
[name][chunkhash:8].js
Cannot use [chunkhash] or [contenthash] for chunk in '[name][chunkhash:8].js' (use [hash] instead)
复制代码
解决办法:请把plugins下面配置的热更新插件删掉:HotModuleReplacementPlugin()html5
根据文件内容来定义hash,文件内容不变,则contenthash不变;通常css会采用contenthash,js发生变化,不会致使css从新生成webpack
css通常都会采用style-loader和css-loader,最终会经过style标签插入到页面上,不会生产css文件,因此须要使用MiniCssExtractPlugin插件git
MiniCssExtractPlugin.loader跟style-loader的功能是互斥的,不能同时存在github
一、安装 npm i mini-css-extract-plugin -Dweb
二、webpack添加配置npm
const MiniCssExtractPlugin = require('mini-css-extract-plugin')
module.exports = {
...
plugins:[
new MiniCssExtractPlugin({
filename:'[name]_[contenthash:8].css'
})
],
module:{
rules:[
{
test:/\.(scss)$/,
use:[
MiniCssExtractPlugin.loader,
'css-loader',
'sass-loader'
]
}
]
}
}
复制代码
file-loader用于处理图片和字体文件json
module.exports = {
entry:{...},
outpath:{path:...,filename:...},
mode:'production',
module:{
rules:[
{
test:/\.(jpg|png|gif|jpeg)$/,
use:{
'file-loader',
options:{
name:'img/[name]_[hash:8].[ext]'
}
}
}
]
}
}
复制代码
使用html-webpack-plugin,设置压缩参数sass
const path = require('path')
const HtmlWebpackPlugin = require('html-webpack-plugin')
module.exports={
...
plugins:[
new HtmlWebpackPlugin({
template:path.join(__dirname,'public/index.html'),
filename:'index.html',//打包处理的文件名称
// chunks:['search'],//生成html用哪些chunk
inject:true,//打包出的js,css自动注入到html中
minify:{
html5:true,
collapseWhitespace:true,
preserveLineBreaks:false,
minifyCSS:true,
minifyJS:true,
removeComments:false
}
}),
]
}
复制代码
使用optimize-css-assets-webpack-plugin,同时使用预处理器cssnano
const OptimizeCssAssetsWebpackPlugin = require('optimize-css-assets-webpack-plugin')
module.exports = {
...
plugins:[
new OptimizeCssAssetsWebpackPlugin({
assetNameRegExp:/\.css$/g,
cssProcessor:require('cssnano')
})
]
}
复制代码
webpack4内置uglifyjs-webpack-plugin,生产环境会触发压缩
使用clean-webpack-plugin
const { CleanWebpackPlugin } = require('clean-webpack-plugin');
module.exports = {
...
plugins:[
new CleanWebpackPlugin()
]
}
复制代码