如何解析package.json中的env变量中的路径?

时间:2018-06-22 16:25:51

标签: javascript node.js environment-variables

在节点中,我想将START_DIR上的process.env设置为process.cwd()。

在脚本package.json中如何实现?

例如,我不能使用环境文件。此应用程序未使用环境文件加载器,因此无法更改。

例如:

"scripts": {
    "start": "set SOMEDIR=process.cwd() && node app",

....

console.log('res', process.env.START_DIR);

1 个答案:

答案 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.CDprocess.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.

中的更多信息