在Webpack5中使用最新的terser-webpack-plugin
根据此链接(Terser 文档),如果您使用的是最新的 Webpack 5,则无需安装 Terser 插件,因为它已包含在 Webpack 5 中。但是,我很难让它发挥作用。
如果我terser-webpack-plugin从我的packages.json文件中删除并尝试像这样使用它(见下面的 webpack.production.js),我会收到这样的构建错误:
[webpack-cli] 加载 'D:ProjectReactMyAppconfigwebpack.production.js' 配置失败
[webpack-cli] 错误:找不到模块 'terser-webpack-plugin'
webpack.production.js
const TerserPlugin = require('terser-webpack-plugin');
const webpack = require('webpack');
const { merge } = require('webpack-merge');
module.exports = merge(commonCfg, {
......
optimization: {
minimize: true,
minimizer: [new TerserPlugin({
cache: false,
parallel: false,
sourceMap: true,
})]
},
现在,如果我terser-webpack-plugin在package.json我的构建中包含最新版本 (5.1.1)并运行我的构建,我会收到以下错误消息:
[webpack-cli] 加载 'D:ProjectReactMyAppconfigwebpack.production.js' 配置失败
[webpack-cli] 无效的选项对象。Terser 插件已使用与 API 架构不匹配的选项对象进行初始化。
- options 有一个未知的属性“sourceMap”。这些属性是有效的: object { test?, include?, exclude?, terserOptions?, extractComments?, parallel?, minify? }
我可以使这项工作的唯一方法是保持terser-webpack-plugin版本 4.2.X。
有什么方法可以使这个工作与最新的 Terser 版本一起使用吗?或者我误解了文档?
回答
嗨,这是我解决 Terserof Webpack 5 的方法
在 Webpack 5 之前:
minimizer: [
new TerserPlugin({
terserOptions: {
mangle: {
compress: {},
},
}
})
]
在 Webpack 5 之后:
minimizer: [
(compiler) => {
const TerserPlugin = require('terser-webpack-plugin');
new TerserPlugin({
terserOptions: {
compress: {},
}
}).apply(compiler);
},
]
你可以在这里阅读更多关于它的信息https://webpack.js.org/configuration/optimization/
并检查 terser 选项检查这个 url
https://github.com/webpack-contrib/terser-webpack-plugin#terseroptions
这是我的文章的链接,解决了更多迁移错误问题
https://medium.com/@arianpopalyar/webpack-4-to-webpack-5-migration-9bc683d2bc72