當部署到Modulus.io(這可能也適用於其他PAAS)時,他們將從packages.json文件安裝所需的軟件包。作爲安裝過程的一部分,也可能會調用一些npm腳本。例如postinstall
。但是,這些腳本可能無法運行(或不應運行)生產。這是因爲腳本只能在本地使用,或者對生產沒有任何意義。如何在部署到PAAS /模塊時忽略npm腳本
如何檢測環境並執行或不執行某些npm腳本?我可以訪問process.env
對象並且適當地處理腳本,或者有更好的方法嗎?
當部署到Modulus.io(這可能也適用於其他PAAS)時,他們將從packages.json文件安裝所需的軟件包。作爲安裝過程的一部分,也可能會調用一些npm腳本。例如postinstall
。但是,這些腳本可能無法運行(或不應運行)生產。這是因爲腳本只能在本地使用,或者對生產沒有任何意義。如何在部署到PAAS /模塊時忽略npm腳本
如何檢測環境並執行或不執行某些npm腳本?我可以訪問process.env
對象並且適當地處理腳本,或者有更好的方法嗎?
不幸的是,你不能在你的package.json
只爲特定的環境定義腳本。
比方說,你在package.json
宣佈這樣的postinstall
腳本:
{
"scripts": {
"postinstall": "node postInstall.js"
},
}
的「易」方法是添加你關於這個postInstall.js
腳本環境邏輯:
if (process.env.NODE_ENV === 'production') {
// Do not run in production
process.exit(1);
}
如果您在production
環境中運行,您只需指示Node.js儘快使用指定的出口co終止進程例如。
如果您在postinstall
鉤子中運行多個腳本,則將所有腳本執行移動到具有相同機制的包裝中,以便在特定環境中退出,如果不是,則執行所有其他腳本。
另一種方法,如果你總是在Unix系統上運行的是使用Bash condition直接檢查Node.js的環境:
{
"scripts": {
"postinstall": "[ \"$NODE_ENV\" != production ] && node postInstall.js"
},
}
在這種情況下,如果節點環境不production
,那麼你」重新運行您的postInstall.js
腳本。您可以將其調整爲僅適用於其他條件,例如development
等。
感謝您使用'$ NODE_ENV'提示。我必須稍微改變它,因爲它會返回退出狀態「1」,因此在部署時暫停執行進一步的執行。它符合以下條件否定條件:''postinstall':「[\」$ NODE_ENV \「= production] || someCmd」'。 – str