2016-07-24 66 views
1

當部署到Modulus.io(這可能也適用於其他PAAS)時,他們將從packages.json文件安裝所需的軟件包。作爲安裝過程的一部分,也可能會調用一些npm腳本。例如postinstall。但是,這些腳本可能無法運行(或不應運行)生產。這是因爲腳本只能在本地使用,或者對生產沒有任何意義。如何在部署到PAAS /模塊時忽略npm腳本

如何檢測環境並執行或不執行某些npm腳本?我可以訪問process.env對象並且適當地處理腳本,或者有更好的方法嗎?

回答

3

不幸的是,你不能在你的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等。

+0

感謝您使用'$ NODE_ENV'提示。我必須稍微改變它,因爲它會返回退出狀態「1」,因此在部署時暫停執行進一步的執行。它符合以下條件否定條件:''postinstall':「[\」$ NODE_ENV \「= production] || someCmd」'。 – str