如何从包中设置一些环境变量。Json使用NPM启动像命令?
以下是我目前在package.json中的内容:
{
...
"scripts": {
"help": "tagove help",
"start": "tagove start"
}
...
}
我想在启动脚本中设置环境变量(如NODE_ENV),同时仍然能够用一个命令启动应用程序,npm start。
如何从包中设置一些环境变量。Json使用NPM启动像命令?
以下是我目前在package.json中的内容:
{
...
"scripts": {
"help": "tagove help",
"start": "tagove start"
}
...
}
我想在启动脚本中设置环境变量(如NODE_ENV),同时仍然能够用一个命令启动应用程序,npm start。
当前回答
这将在Windows控制台工作:
"scripts": {
"setAndStart": "set TMP=test&& node index.js",
"otherScriptCmd": "echo %TMP%"
}
运行aaa
输出: 测验
详情请看这个答案。
其他回答
{
...
"scripts": {
"start": "ENV NODE_ENV=production someapp --options"
}
...
}
只需使用NPM包cross-env。超级简单。适用于Windows、Linux和所有环境。注意,不要使用&&来移动到下一个任务。您只需设置env,然后开始下一个任务。感谢@mikekidder在这里的一个评论中的建议。
从文档:
{
"scripts": {
"build": "cross-env NODE_ENV=production OTHERFLAG=myValue webpack --config build/webpack.config.js"
}
}
注意,如果您想设置多个全局变量,您只需连续地声明它们,然后再加上要执行的命令。
最终,执行的命令(使用spawn)是:
webpack --config build/webpack.config.js
NODE_ENV环境变量将由cross-env设置
如果你:
目前正在使用Windows; 安装git bash; 不要在包中使用set ENV。json,这使得它只能在Windows开发机器上运行;
然后将node的脚本shell从cmd设置为git bash,并在package中编写linux风格的env设置语句。json使它能够在Windows/Linux/Mac上工作。
$ npm config set script-shell "C:\\Program Files\\git\\bin\\bash.exe"
我只是想在这里为未来的node探索者补充我的意见。在我的Ubuntu 14.04上,NODE_ENV=测试不起作用,我不得不使用export NODE_ENV=test,之后NODE_ENV=test也开始工作了,很奇怪。
在Windows上,正如前面所说,你必须使用set NODE_ENV=test,但对于跨平台解决方案,cross-env库似乎没有做到这一点,你真的需要一个库来做到这一点吗:
export NODE_ENV=test || set NODE_ENV=test&& yadda yadda
垂直条是需要的,否则Windows会在无法识别的导出NODE_ENV命令时崩溃。我不知道后面的空格,但为了确保我把它们也去掉了。
因为我经常需要处理多个环境变量,所以我发现将它们保存在一个单独的.env文件中很有用(请确保在源代码控制中忽略这一点)。然后(在Linux中)在启动应用程序之前在脚本命令中前置export $(cat .env | xargs) &&。
例如。env文件:
VAR_A=Hello World
VAR_B=format the .env file like this with new vars separated by a line break
示例index.js:
console.log('Test', process.env.VAR_A, process.env.VAR_B);
示例package.json:
{
...
"scripts": {
"start": "node index.js",
"env-linux": "export $(cat .env | xargs) && env",
"start-linux": "export $(cat .env | xargs) && npm start",
"env-windows": "(for /F \"tokens=*\" %i in (.env) do set %i)",
"start-windows": "(for /F \"tokens=*\" %i in (.env) do set %i) && npm start",
}
...
}
不幸的是,我似乎不能通过从脚本中调用脚本来设置环境变量——比如“start-windows”:“npm run env-windows && npm start”——所以脚本中有一些冗余。
对于一个测试,你可以通过运行npm run env-linux或npm run env-windows来查看env变量,并通过运行npm run start-linux或npm run start-windows来测试它们是否进入了你的应用程序。