如何从内部设置一些环境变量package.json
以与npm start
类似命令一起使用?
这是我目前所拥有的package.json
:
{
...
"scripts": {
"help": "tagove help",
"start": "tagove start"
}
...
}
我想NODE_ENV
在启动脚本中设置环境变量(例如),同时仍然能够仅通过一个命令来启动应用程序npm start
。
如何从内部设置一些环境变量package.json
以与npm start
类似命令一起使用?
这是我目前所拥有的package.json
:
{
...
"scripts": {
"help": "tagove help",
"start": "tagove start"
}
...
}
我想NODE_ENV
在启动脚本中设置环境变量(例如),同时仍然能够仅通过一个命令来启动应用程序npm start
。
{
...
"scripts": {
"start": "ENV NODE_ENV=production someapp --options"
}
...
}
您不应在中设置ENV变量package.json
。actionhero用于NODE_ENV
允许您更改从中的文件加载的配置选项./config
。检出redis配置文件,并查看如何使用NODE_ENV更改以下版本中的数据库选项NODE_ENV=test
如果您想使用其他ENV变量来设置内容(也许是HTTP端口),则仍然无需更改中的任何内容package.json
。例如,如果您PORT=1234
在ENV中进行设置并想将其用作中的HTTP端口NODE_ENV=production
,则只需在相关的配置文件IE中引用它即可:
# in config/servers/web.js
exports.production = {
servers: {
web: function(api){
return {
port: process.env.PORT
}
}
}
}
对于较大的环境变量集或要重用它们时,可以使用env-cmd
。
./.env
文件:
# This is a comment
ENV1=THANKS
ENV2=FOR ALL
ENV3=THE FISH
./package.json
:
{
"scripts": {
"test": "env-cmd mocha -R spec"
}
}
因为我经常发现自己使用多个环境变量,所以我发现将它们保存在单独的.env
文件中很有用(请确保从源代码管理中忽略它)。
VAR_A=Hello World
VAR_B=format the .env file like this with new vars separated by a line break
然后export $(cat .env | xargs) &&
在脚本命令之前添加。
例:
{
...
"scripts": {
...
"start": "export $(cat .env | xargs) && echo do your thing here",
"env": "export $(cat .env | xargs) && env",
"env-windows": "export $(cat .env | xargs) && set"
}
...
}
对于测试,您可以通过运行npm run env
(linux)或npm run env-windows
(windows)查看env变量。
在Windows上尝试通过替换以下方法YOURENV
:
{
...
"scripts": {
"help": "set NODE_ENV=YOURENV && tagove help",
"start": "set NODE_ENV=YOURENV && tagove start"
}
...
}
我只是想在这里加两分钱,供将来的Node-explorer使用。在我的Ubuntu 14.04上NODE_ENV=test
无法正常工作,我不得不使用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会在无法识别的export NODE_ENV
命令:D 上崩溃。邓诺(Dunno)关于尾随的空间,但只是要确保我也将其移开了。
只需使用NPM包cross-env即可。超级容易。适用于Windows,Linux和所有环境。请注意,您没有使用&&转到下一个任务。您只需设置环境,然后开始下一个任务。感谢@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
环境变量将通过交ENV被设置
在脚本命令中设置环境变量:
...
"scripts": {
"start": "node app.js",
"test": "env NODE_ENV=test mocha --reporter spec"
},
...
然后process.env.NODE_ENV
在您的应用中使用。
注意:env
确保它可以跨平台使用。如果只关心Mac / Linux,则可以忽略它。
这将在Windows控制台中运行:
npm run aaa
输出:
test
有关详细信息,请参见此答案。