如何从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 } } } }