眾所周知的概念
npm是一個(gè)包管理器。開(kāi)發(fā)者使用npm命令從npm安裝包、發(fā)布包,從而可以分享和復(fù)用代碼balabala的~
emm...這些概念顯而易見(jiàn),但是卻不是真正的去掌握npm其中的原理。描述的時(shí)候,也只能表層意識(shí)里去說(shuō)出一句“npm是包管理器”罷了。
由于本人也不是很懂原理,并且網(wǎng)上的資源也不多,所以這里只能在閱讀了一些原理教程之后做出粗略的描述。
從nodejs安裝分析npm
日常開(kāi)發(fā)中,都熟練的用npm install去安裝項(xiàng)目的各種依賴(lài)包。那么npm本身又是怎么被安裝的呢?npm的安裝依賴(lài)于的nodejs,所以這里從nodejs分析。
nondejs官網(wǎng)有這樣的一篇安裝教程:通過(guò)包管理器方式安裝 Nodejs。
從標(biāo)題,又看到了那個(gè)熟悉的字眼“包管理器”。這里的包管理器和npm包管理器有什么區(qū)別呢?
系統(tǒng)軟件包管理器
這里各個(gè)系統(tǒng)包管理器的思路大概都是:
- 檢查軟件包的依賴(lài)關(guān)系,找到該軟件包依賴(lài)的所有軟件包,得到所有依賴(lài)關(guān)系的信息文件
- 根據(jù)依賴(lài)關(guān)系的信息文件從軟件源所指 的鏡像站點(diǎn)中,下載相關(guān)軟件包,解壓軟件包
- 解壓后的軟件包有兩種內(nèi)容:可執(zhí)行文件和源程序
- 如果包中是源程序,還需要編譯器將其編譯成為可執(zhí)行文件
- 根據(jù)可執(zhí)行文件完成應(yīng)用程序的安裝和配置
參考:apt-get原理解析、應(yīng)用軟件安裝包常識(shí)、Linux下軟件的安裝與管理(四)
npm原理
npm也是基本上也是這個(gè)思路。不同的是,基于nodejs的流行,npm大部分的安裝包都是從npm自身的代碼倉(cāng)庫(kù)進(jìn)行下載安裝的。npm有基于couchdb的數(shù)據(jù)庫(kù),詳細(xì)記錄了每個(gè)包的信息,包括作者、版本、依賴(lài)、授權(quán)信息等。它的一個(gè)很重要的作用就是:將開(kāi)發(fā)者從繁瑣的包管理工作(版本、依賴(lài)等)中解放出來(lái),更加專(zhuān)注于功能的開(kāi)發(fā)。
至此,可能對(duì)npm有一個(gè)大概的了解了,但是還有很多的不足,需要進(jìn)一步的鞏固。
總結(jié)
npm通過(guò)在自己的代碼倉(cāng)庫(kù)中存儲(chǔ)各個(gè)包、在自己的數(shù)據(jù)庫(kù)中存儲(chǔ)各個(gè)包的信息,然后通過(guò)npm的命令對(duì)包進(jìn)行管理。
所謂的管理,就是基本的CRUD操作;npm包管理器,即可以通過(guò)npm進(jìn)行創(chuàng)建、讀取、更新以及刪除包的操作。
所以npm的實(shí)質(zhì)則是,通過(guò)npm命令去操作自己的數(shù)據(jù)庫(kù),并將操作的結(jié)果反饋給用戶。
- 操作數(shù)據(jù)庫(kù)這個(gè)過(guò)程涉及到依賴(lài)關(guān)系的查詢(xún)。
- 反饋給用戶這個(gè)過(guò)程涉及到編譯、系統(tǒng)操作等。
emm...思路很亂,可能也有說(shuō)的不對(duì)的地方,還有很多需要拓展的地方。
有說(shuō)的不對(duì)的地方,強(qiáng)烈歡迎指出啊~
菜鳥(niǎo)之作,望見(jiàn)諒。