眾所周知的概念
npm是一個包管理器贴届。開發(fā)者使用npm命令從npm安裝包、發(fā)布包蜡吧,從而可以分享和復用代碼balabala的~
emm...這些概念顯而易見毫蚓,但是卻不是真正的去掌握npm其中的原理。描述的時候斩跌,也只能表層意識里去說出一句“npm是包管理器”罷了绍些。
由于本人也不是很懂原理,并且網(wǎng)上的資源也不多耀鸦,所以這里只能在閱讀了一些原理教程之后做出粗略的描述柬批。
從nodejs安裝分析npm
日常開發(fā)中,都熟練的用npm install去安裝項目的各種依賴包袖订。那么npm本身又是怎么被安裝的呢氮帐?npm的安裝依賴于的nodejs,所以這里從nodejs分析洛姑。
nondejs官網(wǎng)有這樣的一篇安裝教程:通過包管理器方式安裝 Nodejs上沐。
從標題,又看到了那個熟悉的字眼“包管理器”楞艾。這里的包管理器和npm包管理器有什么區(qū)別呢参咙?
系統(tǒng)軟件包管理器
這里各個系統(tǒng)包管理器的思路大概都是:
- 檢查軟件包的依賴關系,找到該軟件包依賴的所有軟件包硫眯,得到所有依賴關系的信息文件
- 根據(jù)依賴關系的信息文件從軟件源所指 的鏡像站點中蕴侧,下載相關軟件包,解壓軟件包
- 解壓后的軟件包有兩種內(nèi)容:可執(zhí)行文件和源程序
- 如果包中是源程序两入,還需要編譯器將其編譯成為可執(zhí)行文件
- 根據(jù)可執(zhí)行文件完成應用程序的安裝和配置
參考:apt-get原理解析净宵、應用軟件安裝包常識、Linux下軟件的安裝與管理(四)
npm原理
npm也是基本上也是這個思路裹纳。不同的是择葡,基于nodejs的流行,npm大部分的安裝包都是從npm自身的代碼倉庫進行下載安裝的剃氧。npm有基于couchdb的數(shù)據(jù)庫敏储,詳細記錄了每個包的信息,包括作者朋鞍、版本已添、依賴迫横、授權(quán)信息等。它的一個很重要的作用就是:將開發(fā)者從繁瑣的包管理工作(版本酝碳、依賴等)中解放出來,更加專注于功能的開發(fā)恨狈。
至此疏哗,可能對npm有一個大概的了解了,但是還有很多的不足禾怠,需要進一步的鞏固返奉。
總結(jié)
npm通過在自己的代碼倉庫中存儲各個包、在自己的數(shù)據(jù)庫中存儲各個包的信息吗氏,然后通過npm的命令對包進行管理芽偏。
所謂的管理,就是基本的CRUD操作弦讽;npm包管理器污尉,即可以通過npm進行創(chuàng)建、讀取往产、更新以及刪除包的操作被碗。
所以npm的實質(zhì)則是,通過npm命令去操作自己的數(shù)據(jù)庫仿村,并將操作的結(jié)果反饋給用戶锐朴。
- 操作數(shù)據(jù)庫這個過程涉及到依賴關系的查詢。
- 反饋給用戶這個過程涉及到編譯蔼囊、系統(tǒng)操作等焚志。
emm...思路很亂,可能也有說的不對的地方畏鼓,還有很多需要拓展的地方酱酬。
有說的不對的地方,強烈歡迎指出啊~
菜鳥之作滴肿,望見諒岳悟。