webpack 4 uglifyjs 没有缩小和压缩

hen*_*hen 4 javascript uglifyjs reactjs webpack

我正在使用 webpack 4,我不确定我的代码是否被压缩和缩小。我也在使用 React。

我的第一个问题是在 webpackplugin属性或optimization属性中使用 Webpack UglifyJS 插件。当我使用该plugin属性时,它似乎至少会压缩,但不会压缩到一行。我仍然不确定它是否正在缩小。当我使用optimization它时甚至不压缩。当我查看捆绑的 js 文件时,它似乎捆绑了node_modules诸如webpack.

//与 plugin

module.exports = {
    ...
    plugins: [new UglifyJsPlugin({
        test: /\.js$/,
        exclude: /node_modules/,
        sourceMap: true,
        uglifyOptions: {
            compress: {},
            mangle: true,
        }
}],
Run Code Online (Sandbox Code Playgroud)

//不适用于 optimization

module.exports = {
    ...
    optimization: {
        minimize: true,
        minimizer: [new UglifyJsPlugin({
            test: /\.js$/,
            exclude: /node_modules/,
            sourceMap: true,
            uglifyOptions: {
                compress: {},
                mangle: true,
             }
       }],
    }
Run Code Online (Sandbox Code Playgroud)

在第一个示例中,代码至少被压缩但没有被压缩成一行。

//例子

!*** ./node_modules/scheduler/index.js ***!
  \*****************************************/
/*! no static exports found */function(module,exports,__webpack_require__){"use strict";eval('\n\nif (false) {} else {\n...

 !*** ./node_modules/scheduler/tracing.js ***!
  \*******************************************/
/*! no static exports found */function(module,exports,__webpack_require__){"use strict";eval('\n\nif (false) {...
Run Code Online (Sandbox Code Playgroud)

也不确定它是否被缩小。我在 React 组件中写了一个函数

someFunc(one, two) {
    return one + two
}
Run Code Online (Sandbox Code Playgroud)

根据 npm uglifyjs 文档,这应该缩小为

someFunc(a, b) { \n return a+b\n}
Run Code Online (Sandbox Code Playgroud)

但它被输出为

someFunc(one, two) { \n return one + two\n}
Run Code Online (Sandbox Code Playgroud)

这是在缩小吗?

Din*_*yan 13

Webpack 4 默认在productionmode中进行优化和缩小。

所以如果我猜对了,你的配置就是development配置。

您可以删除显式的 UglifyJsPlugin 定义并将其设置modeproduction,Webpack 将处理所有事情。

mode: 'production',
plugins: [...],
optimization: ...
Run Code Online (Sandbox Code Playgroud)

如果必须,您可以自定义优化。但是将模式设置为production将产生您预期的结果。

更多信息在这里

Webpack 4 模式使用

  • 在我的情况下,要查看构建大小的任何差异,我还必须在 webpack 插件条目下添加 `uglifyJS`:`plugins: [new UglifyJsPlugin()]` 这似乎没有记录,但只执行 `optimization` 条目部分没有反映构建大小的任何变化,我都必须同时进行。 (2认同)