记录一次webpack3升级webpack4
条评论1.注意事项
Node.js v4 –> Node.js v6
CLI被分离成了一个单独的包,所以需要单独安装
webpack-cli升级
plugins新增了配置项:
mode,配置开发环境or生产环境移除的插件:
1
2
3
4
5
6
7
8
9
10
11
12module.exports = {
// ...
plugins: [
- new NoEmitOnErrorsPlugin(),
- new ModuleConcatenationPlugin(),
- new DefinePlugin({ "process.env.NODE_ENV": JSON.stringify("production") })
- new UglifyJsPlugin()
- new NamedModulesPlugin()
- new NoErrorsPlugin(),
- new NewWatchingPlugin()
],
}
关于
CommonsChunkPlugin:CommonsChunkPlugin已被移除,替换成了 optimization.splitChunks
可以根据npm的提示信息进行更新:

2.操作步骤
- 安装
webpack-cli - 更新
webpack的版本,v3.3.0 –> v4.41.2 - 修改
loaders配置,改为use - 修复
exclude配置 启动脚本中加入
mode参数此时报错
Error: Cannot find module 'webpack/bin/config-yargs'更新
webpack-dev-server的版本,v2.5.1 –> v3.9.0此时
html-webpack-plugin报错更新
html-webpack-plugin的版本,v2.29.0 –> v3.2.0此时报错太多,不一一写了,看后面的操作步骤
- 卸载
extract-text-webpack-plugin,安装mini-css-extract-plugin - 修改 webpack 配置中包含
extract-text-webpack-plugin的部分 - 更新
babel-loader的版本 - 安装
@babel/core - 更新
karma-webpack的版本 - 卸载
babel-preset-2015,安装@babel/preset-env rules 配置中加入:
1
2
3
4
5{
type: 'javascript/auto',
test: /\.mjs$/,
use: []
}更新
html-webpack-plugin的版本,v2.29.0 –> v3.0.7wasm 的 loader 出了问题,google 了一下之后改了如下配置,将 wasm 的 loader 单独抽出来加入 type 属性:
1
2
3
4
5{
test: /\.wasm$/,
type: "javascript/auto",
loader: "url-loader",
},截止到此时,终端终于没有报错了。但是浏览器出现了最难解决的报错:
Uncaught TypeError: Object prototype may only be an Object or null: undefined
注意:浏览器控制台有很多报错时,先解决第一个!上面的报错是由于 wasm 的 loader 错误导致的,但直接搜这条报错就会走到 ts 循环引用问题那条路上,无论跑多远都解决不了问题。
TODO: 不同分支 node_modules 版本不同时,每次执行 checkout 之后都需要重新 npm install,如何避免重复 install 而方便地进行切换?
3.更新的包
- [new]
webpack-cliv3.3.10 - [new]
@babel/corev7.7.2 - [new]
@babel/preset-envv7.7.1 - [new]
mini-css-extract-pluginv0.8.0 - [new]
wasm-loaderv1.3.0 - [remove]
extract-text-webpack-pluginv3.0.2 - [remove]
babel-corev6.26.0 - [update]
karma-webpackv3.0.5 –> v4.0.2 - [update]
tslint-eslint-rulesv5.1.0 –> v5.4.0 - [upgrade]
webpackv3.3.0 –> v4.41.2 - [upgrade]
webpack-dev-serverv2.5.1 –> v3.9.0 - [upgrade]
karma-webpackv3.0.5 –> v4.0.2 - [upgrade]
html-webpack-pluginv2.30.1 –> v3.2.0 - [upgrade]
babel-loaderv7.1.2 –> v8.0.6 - 插件
extract-text-webpack-plugin替换成mini-css-extract-plugin,修改了四个文件:webpack.config.extend.jswebpack.config.lib.jswebpack.config.lite.jswebpack.config.prod.js
- webpack4 中
UglifyJsPlugin被废除,需要安装新的插件uglifyjs-webpack-plugin进行替换
4.参考链接
https://webpack.js.org/migrate/4/
https://github.com/dwqs/blog/issues/60
Turf does not work with Webpack 4:
ERROR in ./node_modules/@turf/area/node_modules/@turf/meta/index.mjs 594:25-32
Can’t import the named export ‘feature’ from non EcmaScript module (only default export is available)
https://github.com/Turfjs/turf/issues/1383
about babel:
https://github.com/babel/babel/issues/6808
https://github.com/babel/babel/issues/8707
Can’t import the named export ‘feature’ from non EcmaScript module:
https://github.com/apollographql/react-apollo/issues/1737