【问题标题】:More extensive mangling terser-webpack-plugin?更广泛的修改 terser-webpack-plugin?
【发布时间】:2019-02-13 00:20:34
【问题描述】:

有没有办法彻底破坏与webpack 捆绑在一起的vue 组件?

当通过terser-webpack-pluginmangle.properties 设置为true 应用重整时,并非所有属性名称都被重整,例如:

location: {
  lng: -.134281,
  lat:51.513508,
  zoom:13,
  pitch:1,
  bearing:60
}

变成

location:{
  k:-.134281,
  M:51.513508,
  zoom:13,
  pitch:1,
  V:60
}

编辑

根据要求:Webpack 配置文件的相关部分,在本例中为默认的 vie-cli 配置和手动添加的 mangle.properties 项:

minimizer: [
      {
        options: {
          test: /\.m?js(\?.*)?$/i,
          chunkFilter: () => true,
          warningsFilter: () => true,
          extractComments: false,
          sourceMap: false,
          cache: true,
          cacheKeys: defaultCacheKeys => defaultCacheKeys,
          parallel: true,
          include: undefined,
          exclude: undefined,
          minify: undefined,
          terserOptions: {
            output: {
              comments: /^\**!|@preserve|@license|@cc_on/i
            },
            compress: {
              arrows: false,
              collapse_vars: false,
              comparisons: false,
              computed_props: false,
              hoist_funs: false,
              hoist_props: false,
              hoist_vars: false,
              inline: false,
              loops: false,
              negate_iife: false,
              properties: false,
              reduce_funcs: false,
              reduce_vars: false,
              switches: false,
              toplevel: false,
              typeofs: false,
              booleans: true,
              if_return: true,
              sequences: true,
              unused: true,
              conditionals: true,
              dead_code: true,
              evaluate: true
            },
            mangle: {
              safari10: true,
              properties: true
            }
          }
        }
      }
    ],

【问题讨论】:

  • 能否请您为此发布 webpack 优化配置。
  • @jom 从配置文件中添加了相关部分

标签: vue.js webpack terser


【解决方案1】:

这两个属性(zoompitch)恰好包含在 reserved 名称列表中,请查看 UglifyJS 在修改期间内部使用的默认 domprops.json 文件。

tools/domprops.json 中提供了一个默认排除文件,它应该涵盖在各种浏览器中定义的大多数标准 JS 和 DOM 属性。通过--mangle-props domprops 禁用此功能

如果您想保留此默认列表,您可以在插件的custom minify option 中执行以下任何操作:

  1. 创建您的自定义保留名称列表,
  2. 加载默认列表 (domprops.json) 并传入一个函数/过滤器以删除那些不需要的名称,
  3. 如果您确定没有名称冲突,只需合并这两个文件即可。

webpack.config.js

{
  optimization: {
    minimizer: [
      new TerserPlugin({
        minify(file, sourceMap) {
          const uglifyJsOptions = {
            mangle: {
              properties: {
                reserved: require('your_custom_list')
              }

              // Or filter them

              properties: {
                reserved: require('uglify-js/tools/domprops.json')
                  .filter(name => ![
                    'zoom',
                    'pitch'
                  ]
                  .includes(name))
              }
            }
          };

          return require('uglify-js').minify(file, uglifyJsOptions);
        },
      }),
    ],
  },
}

另外,请注意mangle.reservedmangle.properties.reserved 之间的相似之处,因为后者可能是您需要的。查看minify option structure

【讨论】:

  • 感谢您的信息,很高兴了解 domprops 文件。
  • 有没有办法只破坏特定文件?我遇到了很多问题,其中重整会影响导入的库。
  • 对此不太确定,但您可以尝试在加载程序的规则中指定一个正则表达式模式,针对特定(一组)文件。
猜你喜欢
  • 2021-05-26
  • 1970-01-01
  • 2021-09-28
  • 2015-09-26
  • 2019-12-13
  • 1970-01-01
  • 1970-01-01
  • 2019-06-27
  • 1970-01-01
相关资源
最近更新 更多