npm i 執行流程有哪些?


npm install的整體流程:

檢查 .npmrc 文件:優先級為:項目級的 .npmrc 文件 > 用戶級的 .npmrc 文件> 全局級的 .npmrc 文件 > npm 內置的 .npmrc 文件

檢查項目中有無 lock 文件:

  • 無 lock 文件:

    • 從 npm 遠程倉庫獲取包信息
    • 根據 package.json 構建依賴樹,構建過程:
    • 構建依賴樹時,不管其是直接依賴還是子依賴的依賴,優先將其放置在 node_modules 根目錄。
    • 當遇到相同模塊時,判斷已放置在依賴樹的模塊版本是否符合新模塊的版本范圍,如果符合則跳過,不符合則在當前模塊的 node_modules 下放置該模塊。
    • 注意這一步只是確定邏輯上的依賴樹,並非真正的安裝,后面會根據這個依賴結構去下載或拿到緩存中的依賴包
    • 在緩存中依次查找依賴樹中的每個包

      • 不存在緩存:

        • 從 npm 遠程倉庫下載包
        • 校驗包的完整性
        • 校驗不通過: 重新下載
        • 校驗通過:

          • 將下載的包復制到 npm 緩存目錄
          • 將下載的包按照依賴結構解壓到 node_modules
      • 存在緩存:

        • 將緩存按照依賴結構解壓到 node_modules
        • 將包解壓到 node_modules
    • 生成 lock 文件
  • 有 lock 文件:

    • 檢查 package.json 中的依賴版本是否和 package-lock.json 中的依賴有沖突。
    • 如果沒有沖突,直接跳過獲取包信息、構建依賴樹過程,開始在緩存中查找包信息,后續過程相同

npm 提供了幾個命令來管理緩存數據:

npm cache add:官方解釋說這個命令主要是 npm 內部使用,但是也可以用來手動給一個指定的 package 添加緩存。

npm cache clean:刪除緩存目錄下的所有數據,為了保證緩存數據的完整性,需要加上 --force 參數。

npm cache verify:驗證緩存數據的有效性和完整性,清理垃圾數據。

基於緩存數據,npm 提供了離線安裝模式,分別有以下幾種:

--prefer-offline:優先使用緩存數據,如果沒有匹配的緩存數據,則從遠程倉庫下載。

--prefer-online:優先使用網絡數據,如果網絡數據請求失敗,再去請求緩存數據,這種模式可以及時獲取最新的模塊。

--offline:不請求網絡,直接使用緩存數據,一旦緩存數據不存在,則安裝失敗。

使用建議

開發系統應用時,建議把 package-lock.json 文件提交到代碼版本倉庫,從而保證所有團隊開發者以及 CI 環節可以在執行 npm install 時安裝的依賴版本都是一致的。

在開發一個 npm包 時,你的 npm包 是需要被其他倉庫依賴的,由於上面我們講到的扁平安裝機制,如果你鎖定了依賴包版本,你的依賴包就不能和其他依賴包共享同一 semver 范圍內的依賴包,這樣會造成不必要的冗余。所以我們不應該把package-lock.json 文件發布出去( npm 默認也不會把 package-lock.json 文件發布出去)。

 參考:https://cloud.tencent.com/developer/article/1555982


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM