我傾向於做這樣的事情:
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