问题现象
Webpack-dev-server构建失败,报以下错误:
webpack配置代码
const hotModuleReplacementPlugin = new webpack.HotModuleReplacementPlugin({});
module.exports={
output: {
path: path.resolve(__dirname, "../build"),
filename: `[name].[contenthash].js`,
chunkFilename: `[name].[contenthash:6].js`,
publicPath: "./",
},
plugins: [
miniCssExtractPlugin,
cleanWebpackPlugin,
htmlWebpackPlugin,
copyWebpackPlugin,
hotModuleReplacementPlugin,
]
}
定位过程
通过谷歌搜索报错信息,发现了一些issue:
意思就是,chunkhash和HMR不能共存
下面这个是webpack-dev-server的issue:
问题根因
chunkhash和contenthash和HMR不能共存
复现条件
- Entry,chunk都设置为chunkhash/contenthash
- 使用了webpack的热替换功能
解决
办法有两种:
- 将contenthash/chunkhash改成hash
- 将HMR去掉:把HotModuleReplacementPlugin去掉,或者dev-server关掉hot:true属性
备注
-
如果对entry设置hash,对chunk设置chunkhash,则不会引发这个问题
e.g.
output: { path: path.resolve(__dirname, "../build"), filename: `[name].[hash].js`, chunkFilename: `[name].[contenthash:6].js`, publicPath: "./", },
-
在plugin数组中加入
new webpack.HotModuleReplacementPlugin()
或者在webpack-dev-server配置hot:true 或者 命令行执行
webpack-dev-server --hot
效果相同.
详见: