如何在angular 4.0中使用正则表达式设置UglifyJsPlugin以损坏变量

如何在angular 4.0中使用正则表达式设置UglifyJsPlugin以损坏变量,angular,webpack,uglifyjs,Angular,Webpack,Uglifyjs,我想弄脏Angualr 4输出文件,并弄乱从我的文件开始的特定变量。下面的命令行正是我想要的。我只是想告诉angular cli网页中的uglifyJs插件做同样的事情 > uglifyjs script.js --source-map "filename='script.js.map',includeSources,content=inline" -o script.js -m -c toplevel --mangle-props \"regex=/^my_[^_]{1}/\" --na

我想弄脏Angualr 4输出文件,并弄乱从我的文件开始的特定变量。下面的命令行正是我想要的。我只是想告诉angular cli网页中的uglifyJs插件做同样的事情

> uglifyjs script.js --source-map "filename='script.js.map',includeSources,content=inline" -o script.js -m
-c toplevel --mangle-props \"regex=/^my_[^_]{1}/\" --name-cache uglify-name-cache.json
目前,我使用eject命令从angular cli导出webpack.config.js。但是我找不到任何关于如何告诉自动生成文件的uglifyJsplugin regex和name cache参数的文档。这两个方面对我们的应用程序都至关重要

From webpack.config.js produced by eject command:

new UglifyJsPlugin({
  "test": /\.js$/i,
  "extractComments": false,
  "sourceMap": true,
  "cache": false,
  "parallel": false,
  "uglifyOptions": {
    "output": {
      "ascii_only": true,
      "comments": false
    },
    "ecma": 5,
    "warnings": false,
    "ie8": false,
    "mangle": true,
    "compress": {}
  }
}),
下面是一篇关于如何使用angualr eject捕获自动生成的weppack.config并对其进行修改的博客文章。但是找不到关于如何为Uglify插件指定正则表达式的任何信息

提前谢谢

Some other helpful info:

 "dependencies": {
    "@angular/common": "4.4.6",
    "@angular/compiler": "4.4.6",
    "@angular/core": "4.4.6",
    "@angular/http": "4.4.6",
    "@angular/platform-browser": "4.4.6",
    "@angular/platform-browser-dynamic": "4.4.6",
    "@angular/router": "4.4.6",   },   
 "devDependencies": {
    "@angular/cli": "1.5.0",
    "@angular/compiler-cli": "4.4.6",
    "@types/node": "7.0.43",
    "clean-webpack-plugin": "0.1.17",
    "codelyzer": "3.2.2",
    "copy-webpack-plugin": "4.2.0",
    "uglify-js": "3.1.8",
    "webpack": "3.8.1"   
 }

提供了网页包
uglify og optimize
,请使用它,但我不能保证它能像您一样工作

const {optimize} = require("webpack")

new optimize.UglifyJsPlugin({
    beautify: false,
    output: {
      comments: false
    },
    mangle: {
      screw_ie8: true
    },
    compress: {
      screw_ie8: true,
      warnings: false,
      conditionals: true,
      unused: true,
      comparisons: true,
      sequences: true,
      dead_code: true,
      evaluate: true,
      if_return: true,
      join_vars: true,
      negate_iife: false
    }
  })

网页包uglifyjs插件中有一个bug,它没有将nameCache值传输到uglifyjs。此错误在1.1.0版中已修复

nameCache必须装箱,然后用另一个插件保存到文件中

这将进入webpack.config.js:

   const WriteNameCachePlugin = require(‘./write-name-cache-plugin’);
    var nameCache = JSON.parse(fs.readFileSync(path.join(process.cwd(),“uglify-name-cache.json”), “utf8"));

...

    new UglifyJsPlugin({
      “test”: /\.js$/i,
      “extractComments”: false,
      “sourceMap”: true,
      “cache”: false,
      “parallel”: false,
      “uglifyOptions”: {
        “output”: {
          “ascii_only”: true,
          “comments”: false
        },
        “ecma”: 5,
        “warnings”: false,
        “ie8": false,
        “nameCache”: nameCache,
        “mangle”: {
          properties: {
              regex: /^my_[^_]{1}/,
              reserved: [“$”, “_”]
          }
        },
        “compress”: {}
      }
    }),
...
这将进入write-name-cache-plugin.js

   const fs = require(‘fs’);

   var opt;

   function WriteNameCachePlugin(options) {
        opt = options;
    }


   WriteNameCachePlugin.prototype.apply = function(compiler) {
        compiler.plugin(‘done’, function() {
            fs.writeFileSync(opt.fileName, JSON.stringify(opt.nameCache, null, 4), “utf8");
        });
    };

   module.exports = WriteNameCachePlugin;

可以添加更多配置吗?由angular eject命令自动生成的webpack.config非常大。大部分都是无关紧要的。配置uglifyjs插件的部分就是我在上面剪切粘贴的部分。还有什么你想看的吗?不幸的是它不起作用。我需要能够通过插件将regex和name缓存传递给uglifyjs。我把几个文件弄脏了,文件名必须保持一致。这就是我需要设置名称缓存参数的原因