如何从包中设置一些环境变量。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。
当前回答
对于单个环境变量
"scripts": {
"start": "set NODE_ENV=production&& node server.js"
}
对于多个环境变量
"scripts": {
"start": "set NODE_ENV=production&& set PORT=8000&& node server.js"
}
其他回答
我只是想在这里为未来的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命令时崩溃。我不知道后面的空格,但为了确保我把它们也去掉了。
在script命令中设置环境变量:
...
"scripts": {
"start": "node app.js",
"test": "NODE_ENV=test mocha --reporter spec"
},
...
然后使用process.env。NODE_ENV在你的应用中。
注意:这只适用于Mac和Linux。对于Windows,请参阅注释。
你不应该在package.json中设置ENV变量。actionhero使用NODE_ENV允许您更改从./config文件中加载的配置选项。检查redis配置文件,并查看如何使用NODE_ENV来更改NODE_ENV=test中的数据库选项
如果你想使用其他ENV变量来设置东西(也许是HTTP端口),你仍然不需要改变package.json中的任何东西。例如,如果你在ENV中设置了PORT=1234,并且想在NODE_ENV=production中使用它作为HTTP端口,只需在相关的配置文件IE中引用它:
# in config/servers/web.js
exports.production = {
servers: {
web: function(api){
return {
port: process.env.PORT
}
}
}
}
只需使用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设置
对于更大的环境变量集,或者当你想重用它们时,可以使用env-cmd。
另外,.env文件也可以与direnv一起工作。
。/。env文件:
# This is a comment
ENV1=THANKS
ENV2=FOR ALL
ENV3=THE FISH
/ package.json:
{
"scripts": {
"test": "env-cmd mocha -R spec"
}
}