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

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

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

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


当前回答

{
  ...
  "scripts": {
    "start": "ENV NODE_ENV=production someapp --options"
  }
  ...
}

其他回答

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

除了使用上面描述的cross-env,在包中设置一些环境变量。如果你的脚本涉及运行NodeJS,那么你可以设置Node前置dotenv/config:

{
  scripts: {
    "eg:js": "node -r dotenv/config your-script.js",
    "eg:ts": "ts-node -r dotenv/config your-script.ts",
    "test":  "ts-node -r dotenv/config -C 'console.log(process.env.PATH)'",
  }
}

这将导致您的节点解释器需要dotenv/config,它将自己读取当前工作目录中调用节点的.env文件。

.env格式是宽松的或自由的:

# Comments are permitted
FOO=123
BAR=${FOO}
BAZ=Basingstoke Round About

#Blank lines are no problem

最优雅和便携的解决方案: package.json:

"scripts": {
    "serve": "export NODE_PRESERVE_SYMLINKS_MAIN=1 && vue-cli-service serve"
    },

在windows下创建导出。并把它放在你的%PATH%:

@echo off

set %*
{
  ...
  "scripts": {
    "start": "ENV NODE_ENV=production someapp --options"
  }
  ...
}