在Node.js环境中精简了process.env,使其无法使用
我想在Node.js环境中使用这个包(基本上是用于ES6+的UglifyJS)。我正在使用在Node.js环境中精简了process.env,使其无法使用,node.js,Node.js,我想在Node.js环境中使用这个包(基本上是用于ES6+的UglifyJS)。我正在使用webpack和terser webpack plugin和以下选项: optimization: { minimizer: [ new TerserPlugin({ parallel: true, terserOptions: { ecma: 6, toplevel: true, keep_cl
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\u 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
时修复此问题,但我确实希望将其打开
导入或要求过程
是我尝试的第一件事,但是terser的输出没有任何变化
const process = require('process');
有什么想法吗?我最初认为保留
过程就足够了,但事实证明,没有
相反,我想到了这个:
mangle: {
properties: {
keep_quoted: true,
reserved: [ 'process', 'env' ],
}
}
这有点像黑客,因为它还禁用了manglingfoo.env
。我用['process'、'env'、'process.env']
尝试过,但是它不起作用。你认为我应该在简短的github页面上打开一个问题吗?@dislick抱歉,我说得太快了。请参阅编辑(看起来不可能完全保护“process.env”,但有一个可以接受的解决方法)。