如何从package.json中设置环境variables

如何在package.json中设置一些环境variables来与npm start类似的命令一起使用

这是我想要实现的。

的package.json

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

这里我想在启动脚本部分设置环境variables(如NODE_ENV和其他),我想用一个命令npm start来启动应用npm start

在脚本命令中设置envvariables:

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

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

只需使用NPM包跨环境 。 超级简单。 适用于Windows,Linux和所有环境。 请注意,您不使用&&移动到下一个任务。 您只需设置env,然后开始下一个任务。 在这里的评论之一, 感谢@mikekidder的build议。

从文档:

 { "scripts": { "build": "cross-env NODE_ENV=production OTHERFLAG=myValue webpack --config build/webpack.config.js" } } 

注意,如果你想设置多个全局variables,你只需要先声明它们,然后再执行你的命令。

最终,执行的命令(使用spawn)是:

 webpack --config build/webpack.config.js 

NODE_ENV环境variables将由cross-env设置

我只是想在这里添加我的两分钱给未来的Node-explorers。 在我的Ubuntu 14.04的NODE_ENV=test不起作用,我不得不使用export NODE_ENV=test之后, NODE_ENV=test开始工作太奇怪了。

在Windows上,据说你必须使用set NODE_ENV=test但是对于一个跨平台的解决scheme,cross-env库似乎没有什么set NODE_ENV=test ,你真的需要一个库来做到这一点:

 export NODE_ENV=test|| set NODE_ENV=test&& yadda yadda 

否则,Windows将在无法识别的export NODE_ENV命令上崩溃,因此需要垂直条:D。 不知道后面的空间,但只是为了确定我也删除了它们。

突然我发现actionhero使用下面的代码,通过在开始脚本命令选项中传递--NODE_ENV=production来解决我的问题。

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

我真的很感谢接受别人谁知道更好的方法来设置package.json中的环境variables或init脚本或类似的应用程序,由别人bootstrap的答案。

虽然不是直接回答我想在其他答案上分享想法的问题。 从我得到的每个这些将提供一定程度的复杂性,以实现跨平台的独立性。

在我的情况下,我最初想要设置一个variables来控制是否使用JWT身份validation来保护服务器(用于开发目的)

阅读答案后,我决定创build2个不同的文件,分别打开和closures身份validation。

  "scripts": { "dev": "nodemon --debug index_auth.js", "devna": "nodemon --debug index_no_auth.js", } 

这些文件只是调用原始index.js文件(我重命名为appbootstrapper.js)的包装器:

 //index_no_auth.js authentication turned off const bootstrapper = require('./appbootstrapper'); bootstrapper(false); //index_auth.js authentication turned on const bootstrapper = require('./appbootstrapper'); bootstrapper(true); class AppBootStrapper { init(useauth) { //real initialization } } 

也许这可以帮助别人

你不应该在package.json设置ENVvariables。 actionhero使用NODE_ENV允许您更改从./config的文件加载的configuration选项。 查看redisconfiguration文件 ,并查看NODE_ENV如何用于更改NODE_ENV=test数据库选项

如果你想使用其他的ENVvariables来设置(可能是HTTP端口),你仍然不需要改变package.json任何东西。 例如,如果在ENV中将PORT=1234设置PORT=1234 ,并且希望将其用作NODE_ENV=production的HTTP端口,则只需在相关的configuration文件中引用IE:

 # in config/servers/web.js exports.production = { servers: { web: function(api){ return { port: process.env.PORT } } } }