我想在Node.js环境中使用软件包Terser(基本上是ES6 +的UglifyJS)。我将webpack
和terser-webpack-plugin
用于以下选项:
optimization: {
minimizer: [
new TerserPlugin({
parallel: true,
terserOptions: {
ecma: 6,
toplevel: true,
keep_classnames: false,
keep_fnames: false,
mangle: {
properties: true
}
},
}),
]
},
将mangle.properties
设置为true
时,插件会将process.env
修改为r.es
之类的内容,因此在尝试使用r.es['NODE_ENV']
或类似名称访问时会使其中断码。检查一下terser产生的以下代码:
"use strict";
(function(t) {
Object.defineProperty(e, "l", {
h: !0
});
const n = i(1)
, s = i(45)
, r = i(78);
e.ts = (t=>parseInt(r.es[t] || "")); // r.es should be r.env or process.env
let o = e.ts("LOG_LEVEL");
isNaN(o) && (o = n.ss.ns);
class c {
}
c.rs = e.ts("API_PORT") || 9e3,
c.os = r.es.cs || "0.0.0.0",
c.us = "YES" === r.es.hs,
c.ls = o,
c.fs = e.ts("LOG_ROWS_TO_KEEP") || 1e5,
c.ys = s.join(c.ds, "build"),
e.a = c
}
).call(this, "/")
将mangle.properties
设置为false
时可以解决此问题,但是我真的很想打开它。
导入或要求输入process
是我尝试的第一件事,但是terser的输出完全没有改变。
const process = require('process');
有什么想法吗?
答案 0 :(得分:1)
最初,我认为保留@NgModule({
imports: [...],
declarations: [ AcctSelectComponent, RefillDepositWinComponent ],
entryComponents: [ RefillDepositWinComponent ]
})
export class CabinetLayoutModule { }
就足够了,但事实并非如此。
相反,我想到了这个:
process
这有点骇人听闻,因为例如它还禁用了对mangle: {
properties: {
keep_quoted: true,
reserved: [ 'process', 'env' ],
}
}
的篡改。