<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                [TOC] >[success] # node_modules 層級 ~~~ 1.在 npm 的早期版本, npm 處理依賴的方式簡單粗暴,以'遞歸的形式',在npm3版本 后采用了'扁平結構' ~~~ >[danger] ##### npm2.x 版本node_modules 層級 ~~~ 1.執行?'npm install'?后,'npm' 根據 'dependencies' 和 'devDependencies' 屬性中指定的包 來確定第一層依賴,npm 2 會根據第一層依賴的子依賴,遞歸安裝各個包到子依賴的 'node_modules' 中,直到子依賴不再依賴其他模塊。執行完畢后,我們會看 到?'./node_modules'?這層目錄中包含有我們 'package.json' 文件中所有的依賴包,而這些 依賴包的子依賴包都安裝在了自己的 'node_modules' 中 結構目錄: ├── node_modules │?? ├── A@1.0.0 │?? │?? └── node_modules │?? │?? │?? └── D@1.0.0 │?? ├── B@1.0.0 │?? │?? └── node_modules │?? │?? │?? └── D@2.0.0 │?? └── C@1.0.0 │?? │?? └── node_modules │?? │?? │?? └── D@1.0.0 ~~~ * 結構層級圖 ![](https://img.kancloud.cn/7c/49/7c49d39e574b71f073e2312e8169d32a_842x322.png) ~~~ 1.果你依賴的模塊非常之多,你的 node_modules 將非常龐大,嵌套層級非常之深, 出現下圖的效果,并且也會導致接下來的問題 1.1.在不同層級的依賴中,可能引用了同一個模塊,導致大量冗余,舉個例子當我的 A, B,C 三個包中有相同的依賴 D 時,執行?npm install?后,D 會被重復下載三次 1.2.在 Windows 系統中,文件路徑最大長度為260個字符,嵌套層級過深可能導致不可 預知的問題。 ~~~ ![](https://img.kancloud.cn/8a/9c/8a9c81a778100b1f2f19126325628378_1280x859.png) >[danger] ##### npm3.x 版本 ~~~ 1.npm3.x 版本后采用了扁平化的解決方案,把依賴以及依賴的依賴平鋪'node_modules' 文件夾下共享使用,npm 3 會遍歷所有的節點,逐個將模塊放在 'node_modules'的第一 層,當發現有重復模塊時,則丟棄, 如果遇到某些依賴版本不兼容的問題,則繼續采用 npm 2 的處理方式,前面的放在 'node_modules' 目錄中,后面的放在依賴樹中。 '過程說明': 下圖 'A','B' 都依賴'D(v0.0.1)'那么在安裝的時候將'A'的依賴包都平鋪到'node_modules', 即將'D(v0.0.1)'平鋪到了'node_modules' ,此時到了安裝B包發現B包依賴在 'node_modules' 根已經重復這時候就跳過了,但是安裝C的時候發現C也依賴'D'但是 依賴的版本不同,如果將C依賴的'D'放到'node_modules'根就因為重名問題覆蓋掉 此時解決方案就像'npm2.x'的時候就將C依賴的'D(v0.0.2)'安裝到了C的'node_modules' 下 ~~~ * 如圖 ![](https://img.kancloud.cn/9f/49/9f4910f400ba6844c68e125c924ae165_562x302.png) * 是否解決npm2的 問題 ~~~ 1. 'A','B' 都依賴'D(v0.0.1)' ,'C' 依賴'D(v0.0.2)',如果先安裝C 此時 在安裝A,B時候由于 在安裝'C'的時候'D(v0.0.2)' 被平級安裝在'node_modules',因此'A','B''node_modules' 下都會有一個''D(v0.0.2)' npm 3 并未完全解決冗余的問題,甚至還會帶來新的問題 ~~~ * 如圖 ![](https://img.kancloud.cn/3b/19/3b193551344a0cbac5159f0b40b60463_563x272.png) >[info] ## 參考 [npm 依賴管理中被忽略的那些細節 ](https://www.infoq.cn/article/qj3z2ygrzdgicqauaffn) >[danger] ##### npm5.x 版本 ~~~ 1.從npm 5.x開始,安裝組織node_modules和npm 3.x一樣采用了扁平化的方式,最大的變化是增加了 package-lock.json 文件,npm 3.x有的問題他也有 2.package-lock.json 中已經緩存了每個包的具體版本和下載鏈接,不需要再去遠程倉庫 進行查詢,然后直接進入文件完整性校驗環節,減少了大量網絡請求 ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看