在节点中,我想将START_DIR
上的process.env
设置为process.cwd()。
在脚本package.json
中如何实现?
例如,我不能使用环境文件。此应用程序未使用环境文件加载器,因此无法更改。
例如:
"scripts": {
"start": "set SOMEDIR=process.cwd() && node app",
....
console.log('res', process.env.START_DIR);
答案 0 :(得分:0)
请注意,process.env
代表运行时Node进程的环境,因此可以在模块中以process.env.WHATEVER_VAR
的形式访问Node进程可见的任何环境变量。
为什么不仅仅从应用程序的代码中调用process.cwd()
?它将返回执行节点命令的路径,在本例中为npm start
。了解更多您想要完成的事情会有所帮助,因为我不知道您为什么想要做我认为您想要做的事情。
如果您确实想要准确地做您所描述的事情,则可以使用node -e "console.log('something')"
向外壳输出something
。这是您从npm start
返回的目录中的bash shell运行process.cwd()
时的外观。 (我不确定Windows是否等效):
"start": "export START_DIR=$(node -e \"console.log(process.cwd());\") && node app"
不过,还有其他选择。您可以引用代表工作目录的操作系统内置变量。看起来您可能正在使用Windows,所以该变量的名称为CD
。我相信完整的命令将如下所示:
set SOMEDIR=%CD% && node app
或者,如果您是从bash shell(Linux和MacOS)开始的过程,则:
export SOMEDIR=$PWD && node app
您还可以直接使用process.env.CD
或process.env.PWD
在脚本中访问这些变量。
此方法的唯一危险是,它假定尚未手动将CD
/ PWD
设置为其他值。在Windows中,一种避免此问题的方法是在从中调用npm start
的任何位置创建一个批处理文件。在文件中,执行相同的命令,但用refers to the path containing the file.将%CD%
替换为%~dp0
,然后将start
设置为Windows命令以执行文件,类似于{{1} }。
类似地,在bash环境中创建一个shell脚本并使用call ./file.bat
而不是$(dirname $0)
。使用$PWD
将其设置为可执行文件,并将chmod +x name_of_file
设置为start
。
最后一件事:如果变量的名称无关紧要,bash ./name_of_file
可以告诉npm创建以package.json
为前缀的环境变量。 npm config documentation.