本指南仅显示影响最终用户的主要更改。有关更多详细信息,请参阅 变更日志。
如果您仍在使用 Node.js v4 或更低版本,则需要将 Node.js 安装升级到 Node.js v6 或更高版本。
可以在 此处 找到升级 Node.js 版本的说明。
CLI 已移至单独的包:webpack-cli。您需要在使用 webpack 之前安装它,请参阅 基本设置。
可以在 此处 找到安装指南。
许多第三方插件需要更新到最新版本才能与 webpack 4 兼容。可以在 此处 找到流行插件的链接。
将新的 mode
选项添加到您的配置中。根据您的配置类型,将其设置为 'production'
、'development'
或 'none'
。
webpack.config.js
module.exports = {
// ...
+ mode: 'production',
}
这些插件可以从配置中删除,因为它们在生产模式下是默认的
webpack.config.js
module.exports = {
// ...
plugins: [
- new NoEmitOnErrorsPlugin(),
- new ModuleConcatenationPlugin(),
- new DefinePlugin({ "process.env.NODE_ENV": JSON.stringify("production") })
- new UglifyJsPlugin()
],
}
这些插件在开发模式下是默认的
webpack.config.js
module.exports = {
// ...
plugins: [
- new NamedModulesPlugin()
],
}
这些插件已弃用,现已删除
webpack.config.js
module.exports = {
// ...
plugins: [
- new NoErrorsPlugin(),
- new NewWatchingPlugin()
],
}
CommonsChunkPlugin
已被删除。取而代之的是可以使用 optimization.splitChunks
选项。
有关更多详细信息,请参阅 optimization.splitChunks
的文档。默认配置可能已经满足您的需求。
在使用 import()
加载非 ESM 时,webpack 4 中的结果已发生更改。现在您需要访问 default
属性才能获取 module.exports
的值。
non-esm.js
module.exports = {
sayHello: () => {
console.log('hello world');
},
};
example.js
function sayHello() {
import('./non-esm.js').then((module) => {
module.default.sayHello();
});
}
在使用自定义加载器转换 .json
文件时,现在需要更改模块 type
webpack.config.js
module.exports = {
// ...
rules: [
{
test: /config\.json$/,
loader: 'special-loader',
+ type: 'javascript/auto',
options: {...}
}
]
};
如果仍在使用 json-loader
,则可以将其删除
webpack.config.js
module.exports = {
// ...
rules: [
{
- test: /\.json$/,
- loader: 'json-loader'
}
]
};
module.loaders
自 webpack 2 以来已弃用,现在已弃用,取而代之的是 module.rules
。