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

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

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

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


当前回答

从包中运行node.js脚本。带有多个环境变量的Json:

包中。json文件:

"脚本":{ "set NODE_ENV=prod4 && set LOCAL_RUN=true && node ./x.js", },

X.js文件可以是:

let env = process.env.NODE_ENV; let isLocal = process.env.LOCAL_RUN; console.log("ENV", ENV); console.log(“isLocal”,isLocal);

其他回答

因为我经常需要处理多个环境变量,所以我发现将它们保存在一个单独的.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来测试它们是否进入了你的应用程序。

只需使用NPM包cross-env。超级简单。适用于Windows、Linux和所有环境。注意,不要使用&&来移动到下一个任务。您只需设置env,然后开始下一个任务。感谢@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环境变量将由cross-env设置

突然我发现actionhero正在使用以下代码,这解决了我的问题,只是通过传递——NODE_ENV=生产在启动脚本命令选项。

if(argv['NODE_ENV'] != null){
  api.env = argv['NODE_ENV'];
} else if(process.env.NODE_ENV != null){
  api.env = process.env.NODE_ENV;
}

我真的很感激接受其他人的答案谁知道更多更好的方法设置包中的环境变量。Json或init脚本,这些都是由别人引导的。

注意:为了设置多个环境变量,脚本应该是这样的

  "scripts": {
    "start": "set NODE_ENV=production&& set MONGO_USER=your_DB_USER_NAME&& set MONGO_PASSWORD=DB_PASSWORD&& set MONGO_DEFAULT_DATABASE=DB_NAME&& node app.js",
  },

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

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

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

@echo off

set %*