2017-04-16 175 views
0

我們有一個大的項目涉及多個節點模塊的特定版本/標籤。我們的開發模式有3個級別。如何安裝所有NPM依賴

  • 發展
  • 階段
  • 生產

我們想發佈模塊,我們與開發,分期和生產標籤和期待CI工具來構建和安裝基礎上,DEPS私有註冊表這些標籤。

現在部署到開發環境 CI可以做NPM父模塊上安裝,並與最新版本的所有DEPS被安裝。這裏不用擔心。

但是,如果CI想推的東西階段/生產環境我怎麼告訴NPM安裝挑標記爲階段/生產依賴版本。

我知道是否要安裝特定版本的依賴關係我可以指定npm安裝包@版本。但是由於我們擁有非常多的依賴關係,這種方法對我們來說是不可行的。

我們願意考慮改變我們的發展模式,以及建議。任何幫助,將不勝感激。要做到這一點

回答

1

一種方式是到版本存儲在每個環境的單獨的package.json。

例如,你可以有3個文件dev.package.json,stage.package.json,prod.package.json A/packages目錄。

讓你的CI過程複製正確的package.json因爲它是在安裝環境。

我不知道什麼是CI過程的樣子,所以我給它使用shell腳本示例,用於linux的deploy.sh。

#!/bin/bash 

ENV='production' 
if [[ `hostname` =~ \.development\. ]]; then 
    ENV='development' 
fi 
if [[ `hostname` =~ \.stage\. ]]; then 
    ENV='stage' 
fi 

echo "$ENV environment detected" 

cp packages/$ENV.package.json package.json 

npm install 

這假定服務器的主機名可以幫助指示環境,CI可以運行shell腳本。根據您的設置,您可能需要不同的東西。

例如,你可能已經知道你的CI過程中不使用的主機名檢查部的包膜,但我加以防萬一。

使用這種類型的解決方案,您可以在每個ENV的package.json指定環境所需的確切模塊版本,並使用NPM安裝得到它們。

+0

有趣的方法。是否有任何方式可以將環境作爲package.json本身內的變量引用? – user103054

+0

我認爲最接近你需要的是在package.json配置對象中設置的環境變量。這些變量可用於npm腳本。有關更多信息,請查看https://docs.npmjs.com/files/package.json中的配置部分。據我所知,沒有辦法在npm腳本中使用不同的依賴版本。 – curtwphillips

+0

我已經通過該文檔。您的答案似乎比使用配置更符合我們的要求。 – user103054