我想在使用node.js执行js文件期间添加环境变量。
像: process.env ['VARIABLE'] ='value';
我正在使用终端使用模块运行js文件,我可以设置变量然后在js文件执行期间使用它,但是我想使用“process.env”设置变量,然后当执行结束时,我想在终端或其他js进程中使用它。
我知道可以使用child_process.exec,并使用SET(Windows)或EXPORT(Mac& Linux),但只是询问它是如何可能的,或者使用哪个设计或过程来添加它,只需使用“process.env”。
提前谢谢,伙计们。
答案 0 :(得分:14)
unix权限模型不允许子进程(您的node.js应用程序)更改其父进程(在您的终端内运行的shell)的环境。同样适用于当前工作目录,有效uid,有效gid和其他几个每个进程参数。 AFAIK没有直接的方式来做你要求的事情。您可以执行诸如打印命令以将其设置为stdout之类的操作,以便用户可以轻松地将该shell命令复制/粘贴到其终端中,但最好的办法是解释您尝试在单独的问题中解决的更广泛的问题并让人们告诉你完成这项工作的可行方法,而不是试图改变父进程的环境。
一种可能的解决方法是从终端运行节点程序这样简单:
export SOME_ENV_VAR="$(node app.js)"
并app.js
只需通过process.stdout.write
打印所需的值。
第二个hack将是这些行的包装shell脚本:
<强> app.sh 强>
#!/bin/bash
echo app.sh running with SOME_ENV_VAR=${SOME_ENV_VAR}
echo "app.sh running app.js"
export SOME_ENV_VAR="$(node app.js)"
exec /bin/bash
<强> app.js 强>
console.log("Some Value at " + Date());
在终端的交互式shell中运行
echo $SOME_ENV_VAR
exec ./app.sh
app.sh running with SOME_ENV_VAR=
app.sh running app.js
echo $SOME_ENV_VAR
Some Value at Thu Mar 27 2014 08:13:01 GMT-0600 (MDT)
也许这些会给你一些想法。