如何在angular 4.0中使用正则表达式设置UglifyJsPlugin以损坏变量
我想弄脏Angualr 4输出文件,并弄乱从我的文件开始的特定变量。下面的命令行正是我想要的。我只是想告诉angular cli网页中的uglifyJs插件做同样的事情如何在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
> 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。我把几个文件弄脏了,文件名必须保持一致。这就是我需要设置名称缓存参数的原因