2016-08-25 95 views
8

我正在使用基於NPM的工具構建HTML5前端(grunt)。持續集成的NPM最佳實踐

我的持續集成構建過程的第一步之一是運行npm install

npm installSLOW。即使使用本地NPM代理緩存工件(Sonatype的Nexus 3),它仍然需要4分鐘!

$> time npm install 
real 4m17.427s 
user 0m0.170s 
sys  0m0.290s 

如果我按照我的持續集成常用的最佳實踐,我就從一個原始的SCM倉庫啓動和運行構建。這意味着每次CI構建將不得不執行新的npm install並承擔4分鐘的成本。

這是一個顯着我的建造時間比例。我很不滿意這個構建花了這麼長時間。


另一種方法似乎是讓node_modules保持在構建之間。但是,由於構建變得不穩定,我遇到了問題。

package.json中刪除依賴關係並不會從node_modules中刪除它們,只需使用簡單的npm install即可。我可以先用npm prune解決這個問題。

什麼被認爲是最佳實踐在這裏?

+0

你使用的是什麼版本的npm? npm 5保留[本地程序包緩存](https://docs.npmjs.com/cli/cache)。 – msanford

回答

1

考慮到爲了構建您必須安裝新的軟件包,您別無選擇,只能致電安裝。至於原始的,我堅信他們是指「構建」過程而不是「依賴管理」過程。

他們爲什麼不同?讓我們通過一個例子來使其更加明顯。

作爲一名開發人員,當您第一次開始工作時,您必須「安裝」可啓用代碼的「 」軟件。這通常是一次完成的。 之後,您可以開始編碼。後者是「構建」部分 ,因爲您正在爲代碼生成的每個功能生成值。從 不時,您可以通過刪除,添加或更新工具列表來更新您的工具列表。

在這個例子中,每天安裝你的工具,你開始編碼之前到達工作將是地獄。

我建議你確保構建過程,這意味着生產工件(例如Jar),與依賴項安裝過程分離。這意味着安裝只需完成一次,即可順利進行安裝。你沒有提到將要建造的東西,但是咕嚕聲可以確保其餘部分的處理。

因此,我認爲修剪和安裝是一個很好的策略。你不應該擔心第一次。把它想象成冷啓動。任何使用子組件作爲管道工作的系統都有這個「問題」。以汽車爲例。當你開車時,它不會像在一小時後駕駛時那樣節油。

0

安排日常工作以構建與您的依賴項相關的Docker容器。在最新的容器中運行您的CI作業。僞造CI作業的構建。

0

您在使用npm link甚至符號鏈接整個node_modules文件夾考慮? 至少npm鏈接可用於您的開發依賴項,無論如何,您通常都希望在服務器上擁有受控的版本。這應該會加快一點。