2017-05-24 139 views
0

我注意到这种奇怪的行为,这并不是什么大不了的事情,但是窃听了我。节点在Windows上的环境变量

在我的package.json文件的“scripts”部分下,我有一个“start”条目。它看起来像这样:

"scripts": { 
    "start": "APPLICATION_ENV=development nodemon app.js" 
} 

在Mac终端上键入npm start工作正常,并nodemon运行具有正确的APPLICATION_ENV变量应用程序如预期。当我在Windows环境下尝试相同时,出现以下错误:

“'APPLICATION_ENV'未被识别为内部或外部命令,可操作程序或批处理文件。

我已经尝试了git-bash shell和正常的Win CMD提示符,同样的处理。

我觉得这很奇怪,因为直接输入命令到终端(不通过npm启动package.json脚本)工作正常。

有没有其他人看过这个,找到了解决办法?谢谢!!

回答

1

要在脚本中跨平台使用环境变量,请安装并使用cross-env

"scripts": { 
    "start": "cross-env APPLICATION_ENV=development nodemon app.js" 
} 

这个问题在提供给cross-env的链接中有很好的解释。它读取:

Most Windows command prompts will choke when you set environment variables with NODE_ENV=production like that. (The exception is Bash on Windows, which uses native Bash.) Similarly, there's a difference in how windows and POSIX commands utilize environment variables. With POSIX, you use: $ENV_VAR and on windows you use %ENV_VAR% .

0

我结束了使用基于第二个答案在这里dotenv包:

Node.js: Setting Environment Variables

我喜欢这个,因为它可以让我设置环境变量,而无需注入额外的文本进入我的npm脚本行。相反,他们正在使用.env文件(应放置在每个环境中并从版本控制中省略)。