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

node.js Node.js

梅米亚

2020-03-19

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

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

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

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

第2290篇《如何在package.json中设置环境变量》来自Winter(https://github.com/aiyld/aiyld.github.io)的站点

9个回答
ItachiA 2020.03.19

这将在Windows控制台中运行

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

npm run aaa

输出: test

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

Itachi达蒙Green 2020.03.19
{
  ...
  "scripts": {
    "start": "ENV NODE_ENV=production someapp --options"
  }
  ...
}
西里GO 2020.03.19

您不应在中设置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
      }
    }
  }
}
理查德神无Mandy 2020.03.19

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

./.env 文件:

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

./package.json

{
  "scripts": {
    "test": "env-cmd mocha -R spec"
  }
}
十三西里GO 2020.03.19

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

LSam 2020.03.19

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

  {
    ...
     "scripts": {
       "help": "set NODE_ENV=YOURENV && tagove help",
       "start": "set NODE_ENV=YOURENV && tagove start"
     }
    ...
  }
宝儿米亚飞云 2020.03.19

我只是想在这里加两分钱,供将来的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

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

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

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

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

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

问题类别

JavaScript Ckeditor Python Webpack TypeScript Vue.js React.js ExpressJS KoaJS CSS Node.js HTML Django 单元测试 PHP Asp.net jQuery Bootstrap IOS Android