如何从包中设置一些环境变量。Json使用NPM启动像命令?

以下是我目前在package.json中的内容:

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

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


当前回答

对于更大的环境变量集,或者当你想重用它们时,可以使用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"
  }
}

其他回答

你不应该在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
      }
    }
  }
}
{
  ...
  "scripts": {
    "start": "ENV NODE_ENV=production someapp --options"
  }
  ...
}

在windows中使用git bash。Git Bash处理命令的方式与cmd不同。

当您像这样使用NODE_ENV=production设置环境变量时,大多数Windows命令提示符都会阻塞。(Windows上的Bash是个例外,它使用原生Bash。)类似地,窗口和POSIX命令利用环境变量的方式也有所不同。对于POSIX,您使用:$ENV_VAR,在windows上使用%ENV_VAR%。-交叉环境文件

{
  ...
  "scripts": {
    "help": "tagove help",
    "start": "env NODE_ENV=production tagove start"
  }
  ...
}

使用dotenv包来声明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来测试它们是否进入了你的应用程序。

如果你:

目前正在使用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"