如何在package.json中设置环境变量

如何从内部设置一些环境变量package.json以与npm start类似命令一起使用

这是我目前所拥有的package.json

{
  ...
  "scripts": {
    "help": "tagove help",
    "start": "tagove start"
  }
  ...
}

我想NODE_ENV在启动脚本中设置环境变量(例如),同时仍然能够仅通过一个命令来启动应用程序npm start

ItachiA2020/03/19 11:19:10

这将在Windows控制台中运行

"scripts": {
  "aaa": "set TMP=test && npm run bbb",
  "bbb": "echo %TMP%"
}

npm run aaa

输出: test

有关详细信息,请参见此答案

Itachi达蒙Green2020/03/19 11:19:10
{
  ...
  "scripts": {
    "start": "ENV NODE_ENV=production someapp --options"
  }
  ...
}
西里GO2020/03/19 11:19:10

您不应在中设置ENV变量package.jsonactionhero用于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
      }
    }
  }
}
理查德神无Mandy2020/03/19 11:19:10

对于较大的环境变量集或要重用它们时,可以使用env-cmd

./.env 文件:

# This is a comment
ENV1=THANKS
ENV2=FOR ALL
ENV3=THE FISH

./package.json

{
  "scripts": {
    "test": "env-cmd mocha -R spec"
  }
}
十三西里GO2020/03/19 11:19:10

因为我经常发现自己使用多个环境变量,所以我发现将它们保存在单独的.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变量

LSam2020/03/19 11:19:10

在Windows上尝试通过替换以下方法YOURENV

  {
    ...
     "scripts": {
       "help": "set NODE_ENV=YOURENV && tagove help",
       "start": "set NODE_ENV=YOURENV && tagove start"
     }
    ...
  }
宝儿米亚飞云2020/03/19 11:19:10

我只是想在这里加两分钱,供将来的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)关于尾随的空间,但只是要确保我也将其移开了。

乐小小猪猪2020/03/19 11:19:10

只需使用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被设置

飞云Pro猴子2020/03/19 11:19:09

在脚本命令中设置环境变量:

...
"scripts": {
  "start": "node app.js",
  "test": "env NODE_ENV=test mocha --reporter spec"
},
...

然后process.env.NODE_ENV在您的应用中使用

注意:env确保它可以跨平台使用。如果只关心Mac / Linux,则可以忽略它。