搜尋

首頁  >  問答  >  主體

javascript - 為什麼要有套件管理器?或說它是做什麼的?

找了很多資料訊息,都很沒有明確的解釋這個,有誰可以幫我解釋一下嗎?

滿天的星座滿天的星座2779 天前459

全部回覆(2)我來回復

  • 曾经蜡笔没有小新

    曾经蜡笔没有小新2017-05-19 10:18:42

    至少有兩點好處:

    1. 復用別人已經寫好的程式碼

    2. 管理包之前的依賴關係

    第一點很明顯了:你不會為每個專案寫一個 jQuery、React 這樣的東西,而是直接使用別人已經寫好的。傳統做法是:去官方網站下載對應的 js 文件,然後放到自己專案的對應路徑下,例如 /assets/js/ 。而現在有了 npm 和 yarn 這樣的東西,99.9999 % 的開放獲取的包都在一個集中存放的地方,方便了查找和下載。就好比原來你要到各處去下載軟體,現在有了 360 軟體管家,只需要在這裡搜尋下載就好了。少了很多時間。

    第二點其實是第一點的發展版。因為大家寫的包包都放在這裡了。如果我要寫一個新的包,裡面的一個小程式剛好是別人已經寫好的,所以我就拿來用了。這樣就是我的包包對別人的包包有了依賴關係。一個大型的庫(包)這個依賴關係可能很複雜,例如:依賴幾十個別的包,同時,每個包都要求對應一個確定的版本(因為版本相差太大,可能會有API不相容的情況)。這樣,如果人工去下載每一個依賴的包,將是一個指數級的任務:

    A 套件依賴 B 和 C,同時 C 依賴 D 和 E,B 又依賴 F、G、H,D 又依賴 I、J、K……

    如此,基本上是人類無法完成的任務。

    當然,在沒有套件管理器之前,也沒有人寫包會依賴於這麼多其它人的包,結果當然就是重複勞動:每個包都把一些常用的功能自己實現一遍。

    以上是我暫時能想到的用處,如果想到別的,再來補充。

    回覆
    0
  • 高洛峰

    高洛峰2017-05-19 10:18:42

    00

    你寫了一個函數 並用來工作

    function add(x, y){
        return x + y; 
    }

    01

    在那個活兒幹完之後,你開始乾新的活兒了。 現在你又需要這個函數了,而且你需要做改進:

    function add(x, y, z){
        return x + y + z; 
    }

    很簡單 直接複製貼上過來 然後再加上 z 即可

    02

    你在 01 幹的活兒 讓add可以接受三個參數 是一個新版本的 了。
    然而 你又接到了新活兒, 這次你又要做出改進:

    function add(){
        var arr = Array.prototype.slice.call(arguments); 
        return arr.reduce((acc, cur) => acc + cur, 0); 
    }
    // add(1) => 1 
    // add(1, 2) => 3 
    // add(1, 2, 3) => 6

    99

    你做了無數改進。 有一天你又需要 00 中的簡單加法函數的時候:
    ———— 你在你做過的 99 件活裡慢慢的翻你曾經的代碼。 。 。 。然後拷貝過來

    這是一件很麻煩的事。 。 。

    包管理器把這些活兒都自動化了。 你可以打包你的程式碼,然後簡單的 require 引用 而且用npm指令一鍵安裝(還可以指定版本)

    重複麻煩的事情都會由程式設計解決

    回覆
    0
  • 取消回覆