曾经蜡笔没有小新2017-05-19 10:18:42
至少有兩點好處:
復用別人已經寫好的程式碼
管理包之前的依賴關係
第一點很明顯了:你不會為每個專案寫一個 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……
如此,基本上是人類無法完成的任務。
當然,在沒有套件管理器之前,也沒有人寫包會依賴於這麼多其它人的包,結果當然就是重複勞動:每個包都把一些常用的功能自己實現一遍。
以上是我暫時能想到的用處,如果想到別的,再來補充。
高洛峰2017-05-19 10:18:42
你寫了一個函數 並用來工作
function add(x, y){
return x + y;
}
在那個活兒幹完之後,你開始乾新的活兒了。 現在你又需要這個函數了,而且你需要做改進:
function add(x, y, z){
return x + y + z;
}
很簡單 直接複製貼上過來 然後再加上 z 即可
你在 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
你做了無數改進。 有一天你又需要 00 中的簡單加法函數的時候:
———— 你在你做過的 99 件活裡慢慢的翻你曾經的代碼。 。 。 。然後拷貝過來
這是一件很麻煩的事。 。 。
包管理器把這些活兒都自動化了。 你可以打包你的程式碼,然後簡單的 require 引用 而且用npm指令一鍵安裝(還可以指定版本)
重複麻煩的事情都會由程式設計解決