2014-02-27 45 views
14

我想在構建過程階段加速npm安裝。我的package.json有很多包含鎖定修訂版的軟件包列表。我一直在使用該命令還配置了高速緩存目錄加速npm安裝

npm config set cache /var/tmp/npm-cache --global 

然而,在嘗試使用npm install -g --cache安裝,我覺得這一步是不是通過減少從緩存中只裝包,因爲我將要安裝的時間期望。事實上,我懷疑它是否使用本地緩存先查找軟件包。

+0

不確定我完全按照,但聽起來類似於npm-shrinkwrap試圖解決的一些問題。 https://www.npmjs.org/doc/cli/npm-shrinkwrap.html –

回答

1

你也可以在你的版本庫中包含你的node_modules文件夾(你可能正在使用git),並且只有npm rebuild(它可以跨平臺工作)構建/部署過程,並且速度非常快。

這也將讓你完全控制的好處在所有的依賴性(我知道這是什麼拆封通常應該使用)

編輯:

您也可以設置進度標記爲虛假日將提升至少 20%。這一聲僅適用於[email protected],會有希望修正爲(見第二個鏈接)

npm set progress=false 
+0

謝謝!我們正在使用顛覆。它還會好嗎? – Prashanth

+1

當然,但請記住,您可能遇到一些合併問題。在我們的團隊中,我們正在這樣做,我們對此非常滿意。完全控制依賴關係和非常快速的構建/部署過程 – hereandnow78

6

正如@Daniel塞羅迪奧建議

您還可以包含您的node_modules文件夾,你的倉庫內,但你應該拉鍊它首先不是增加回購,並在安裝可以解壓它,只是

npm rebuild 

(其中工程跨平臺),它是相當快的。

這也可以讓您全面控制您的所有依賴關係。

此外,您可以將進程標誌設置爲false將您的速度提高2倍。

npm set progress=false 

Read source for more info

+0

使用'-s'選項不會是一樣的嗎? –

0

我們一直在努力解決這個問題,以加快我們的部署。

我們已經決定使用pac,它遵循其他答案中的原則。它將npm模塊壓縮並將它們包含在您的回購站中,因此您的提交和代碼評論中沒有一百萬個文件,您只需爲目標機器解壓縮/重新構建即可。

https://www.npmjs.com/package/pac

0

沒有幫我多(在我的情況的Windows Defender)禁用殺毒軟件,我從2:30到1分鐘。 隨着npm-cache包我達到~30秒。 我試過使用紗線,速度非常快,但在我的情況下隨機失敗。

2

作爲非常現代的解決方案,您可以開始使用Docker。 Docker允許虛擬化並預先定義代碼的當前狀態,包括安裝的npm-modules和其他好東西。

一旦您的基礎架構/ env的docker映像在本地構建,或者從遠程存儲庫中檢索到,它將存儲在主機上,您可以在幾秒鐘內完成服務器的自旋。 它的另一個好處是您可以在部署代碼的任何機器上使用相同的虛擬化代碼基礎架構。 Docker加速安裝/部署過程並且被廣泛使用的技術。

要開始使用碼頭工人就足以(所有的片段是用於預設置只是模擬/示例,並且不以任何方式最健壯/優雅的解決方案):

1)碼頭工人和搬運工-撰寫使用安裝手冊,並得到它的一些基本的瞭解,在

2)寫在你的應用程序

FROM node:6.9.5 
RUN mkdir /usr/local/app 
WORKDIR /usr/local/app 
COPY package.json package.json 
RUN npm install 

3)在與這些內容項目的根目錄中創建泊塢窗,compose.yml根Dockerfile文件:

version: "2" 
server: 
    hostname: server 
    container_name: server 
    image: server 
    build: . 
    command: sh -c 'NODE_ENV=development PORT=8080 node app.js' 
    ports: 
    - "8080:8080" 
    volumes: #list of folders and files to use 
    - ${PWD}/server:/usr/local/server 
    - ${PWD}/app.js:/usr/local/app.js 

4)要啓動服務器,您需要docker-compose up -d。要查看日誌docker-compose logs -f server。如果您將重新啓動服務器,它將在一次構建映像後幾秒鐘內完成。然後它會在本地緩存構建圖層,因此下一次運行只需要幾秒鐘。

我知道這可能是一個強大的解決方案,但我相信它具有最大的潛力/靈活性,並在工業中廣泛使用。儘管之前需要對以前沒有使用過Docker的人進行一些學習,但我認爲這是最適合您的問題。