我倾向于做这样的事情:
var env = process.env.NODE_ENV || 'development';
就在主引导程序文件(app.js,main.js ,start.js或任何你命名的),因为我通常的用例是本地开发工作。所以如果没有设置,它使用开发,如果我已经明确地设置了一个环境变量,它会使用它(通常只为生产设置,但可以是任何东西,包括测试等)。
然后,对于生产环境,您只需设置NODE_ENV环境变量(在部署到实时环境时,可以非常简单地设置Heroku等云服务)。
你有时会看到另一种模式是:
var env = process.env.NODE_ENV = process.env.NODE_ENV || 'development';
这实际上也更新process.env.NODE_ENV分配的值,这意味着如果你有其他地方也检查proces.env.NODE_ENV的价值那么你不必继续使用“||'开发'”检查。这不是我倾向于使用的模式,但你会在野外看到它。
您的npm脚本条目看起来不错,但没有什么能阻止您定义其他脚本,调用shell脚本,设置env变量等。 如果你想有一个生产,我建议你做的是明确的:
eg.In的package.json:
"scripts": {
"start": "npm run dev"
"dev": "nodemon start.js",
"prd": "NODE_ENV=production node start.js"
}
这样一来,没有混乱,你必须要么运行:
npm run dev
// same as npm start
或
npm run prd
以上,我们的开发环境是EXEC根据要求与nodemon以及我们的生产环境节点。
更新基于OP反馈
这child_process方法是最好的,从开始你的主节点的应用程序。这是我的问题的重点
你所问的是非典型的 - 但是,当然有选择:
如果你想背景节点实例,则容易从命令控制这个(&)等
但是,如果你真的想这样做,那么在过去我选择使用NPM模块 - cluster。
npm install cluster
这样就可以产卵从主进程的子实例 - 在你的情况下,只需设置子实例数为1
var cluster = require('cluster')
, app = require('./main');
cluster(app)
.set('workers', 1)
// other configuration here
最后,如果你不希望使用集群,真正的问题是多线沿线的“如何启动内部节点的另一Node.js应用程式,然后:
使用child_process.fork()它类似于spawn()
,而是用来创造全新的章安。 V8的nces。因此它专门用于运行Node的新实例。
var fork = require('child_process').fork;
var child = fork('./main');
还有更多选项,详情请参阅documentation。
给出了一个答案,请让我知道如果有什么事情你都弄不清 - 很高兴,如果需要扩大。 – arcseldon
嗨,请你可以查看我的答案,并让我知道你是否觉得有帮助(upvote/mark as answer)。如果您需要更多信息,请告诉我 - 欢迎提供进一步支持。 – arcseldon