node.js process.env:将 process.env 属性分配给字符串类型中的未定义结果
node.js process.env: assigning process.env property to undefined results in string type?
node.js process.env
对象似乎以不同于常规JavaScript对象的方式处理属性赋值。在这种情况下,如何让process.env
对象像常规对象一样工作?
下面是说明不同赋值行为的示例代码。出于某种原因,将undefined
分配给属性会导致字符串类型(仅适用于process.env
):
function demo(description, dict) {
console.log(description);
dict.A = undefined;
console.log('typeof dict.A: ' + typeof dict.A + ''n');
}
demo('Passing empty object:', {});
demo('Passing process.env:', process.env);
生成的输出会有所不同,具体取决于是{}
空对象还是传递了process.env
对象:
$ 节点测试.js传递空对象:字典类型。A:未定义Pass process.env:字典类型。A:字符串
process.env
对象强制其所有属性均为字符串类型,因为环境变量必须始终为字符串。 我不完全确定您的目的,但也许您可以尝试其中之一作为解决方法:
-
将
process.env
对象复制到新对象中,然后该对象将正常运行:envCopy = {}; for (e in process.env) envCopy[e] = process.env[e];
-
如果您希望属性为"空白",请改为将
''
分配给该属性process.env.A = '';
然后,当您将其视为布尔值时,它将返回 false
if (process.env.A) { ... }
-
或者正如乔纳森·洛诺夫斯基(Jonathan Lonowski)指出的那样,你也可以从
process.env
delete
钥匙delete process.env.A;
希望这有帮助
发生这种情况是因为process.env
强制其所有值String
:
process.env.A = undefined;
console.log(process.env.A); // 'undefined' (note the quotes)
process.env.A = true;
console.log(process.env.A); // 'true'
console.log(typeof process.env.A); // 'string'
如果需要删除环境变量,则必须delete
它:
function demo(description, dict) {
console.log(description);
delete dict.A;
console.log('typeof dict.A: ' + typeof dict.A + ''n');
}
demo('Passing process.env:', process.env);
// Passing process.env:
// typeof dict.A: undefined
你可以通过使用Object.defineProperty
来绕过process.env
的字符串强制:
Object.defineProperty(process.env, 'ENV_VAR_NAME', {
configurable: true,
value: nonStringValue
});
如果您以后想delete process.env.ENV_VAR_NAME
,则需要configurable: true
。
相关文章:
- 如何同步写入process.stdout
- Node.js-等待process.exit()在前面的代码完成后执行
- 如何获得ENV类型Laravel + VueJS + Homestead
- 将process.env变量从节点传递或使用到reactjs
- 在Node.js中使用setImmediate()和process.nextTick()的意义
- 命令行上的输入在什么时候解析为 node.js 中的 process.argv
- jQuery和其他从工作的jsfiddle复制到本地env时未运行的JS
- 我可以在web应用程序的客户端使用.env文件吗
- JSON值使用process.env[node.js]动态更新
- 节点.JS错误 - process.env.NODE_TLS_REJECT_UNAUTHORIZED.这是什么意思
- node.js process.env:将 process.env 属性分配给字符串类型中的未定义结果
- Meteor:process.env.MAIL_URL敏感信息
- Node process.env 变量为空
- process.env.PORT打印奇怪的字符串
- Webpack: -p vs NODE_ENV=production vs process.env.NODE_ENV
- 需要node.js中的process.env
- 用mocha测试依赖于环境变量process.env.APP_ENV的配置模块
- Heroku process.env.port is undefined
- process.env.PWD vs process.cwd()
- process.env不会't包含HOME信息