2014-11-08 104 views
6

我想使用$>npm start,並使用「nodemon」進行開發,使用「nodemon」進行生產。我不能把條件邏輯放在我的package.json文件中,那麼最好如何實現?Node.js - nodemon vs node - development vs production

+0

*井當然你可以在package.json腳本行中放置條件邏輯。這些腳本字符串值由bash簡單解釋。 – 2017-06-20 07:49:25

回答

5

nodemon實際讀取package.start值,所以如果你只是設置start屬性爲你」 d在生產中,如node app.js,然後運行nodemon而沒有任何參數,它將與package.start一起運行並重新啓動,期待開發。

+1

儘管這在全局使用nodemon時很有用,但我認爲它對於想要鍵入'npm start'並讓它在'dev'環境中運行nodemon並且在'production'時運行節點沒有幫​​助'。下面的條件if語句的答案似乎是實現這一目標的唯一方法。 – 2016-08-29 19:17:40

+0

@AdamReis:有時候一個問題會問如何做錯事。這就是所謂的XY問題,它不僅可以接受,而且可以鼓勵SO以不使用X的方式實現Y的正確方式。在這種情況下,OP可能不知道nodemon實際上是如何工作的,沒有必要。因此,如果有更好的方法去做事情,就沒有必要完成字面問題。 – slebetman 2017-01-04 16:39:58

4

您應該能夠將NPM的啓動用作常規shell腳本。

"scripts": { 
    "start": "if [$NODE_ENV == 'production']; then node app.js; else nodemon app.js; fi" 
} 

現在開始您的服務器生產

$ NODE_ENV='production' npm start 

或發展

$ NODE_ENV='development' npm start 
+0

很酷 - 當我試着在package.json文件中嵌入shell腳本時,出現錯誤,但看起來像後面的命令將有所幫助。我正在使用heroku,所以我相信我必須設置env變量在heroku – 2014-11-14 08:14:17

+0

這不適用於Windows,但它可能適用於Mac/Unix – 2014-12-20 00:32:31

+0

這應該是公認的答案。 – jmiraglia 2016-11-28 19:40:10

1

我很喜歡丹尼爾的解決方案,但認爲這將是更清潔把它放在一個單獨的文件startup.sh

#!/bin/sh 

if [ $NODE_ENV = "production" ]; then 
    node src/index.js; 
else 
    nodemon src/index.js; 
fi 

然後,只需更改的package.json閱讀:

"scripts": { 
    "start": ". ./startup.sh" 
},