npm原理理解

眾所周知的概念

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)包管理器的思路大概都是:

  1. 檢查軟件包的依賴(lài)關(guān)系,找到該軟件包依賴(lài)的所有軟件包,得到所有依賴(lài)關(guān)系的信息文件
  2. 根據(jù)依賴(lài)關(guān)系的信息文件從軟件源所指 的鏡像站點(diǎn)中,下載相關(guān)軟件包,解壓軟件包
  3. 解壓后的軟件包有兩種內(nèi)容:可執(zhí)行文件和源程序
  4. 如果包中是源程序,還需要編譯器將其編譯成為可執(zhí)行文件
  5. 根據(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)諒。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,881評(píng)論 25 709
  • 用兩張圖告訴你,為什么你的 App 會(huì)卡頓? - Android - 掘金 Cover 有什么料? 從這篇文章中你...
    hw1212閱讀 13,945評(píng)論 2 59
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,534評(píng)論 19 139
  • 得不到回應(yīng)的感情要懂得適可而止,不虧待每一份熱情,不要討好任何冷漠,當(dāng)別人不需要你的時(shí)候要學(xué)會(huì)自己走開(kāi)多一點(diǎn)自知之...
    90后的大叔閱讀 193評(píng)論 0 0
  • 一 排版 1,關(guān)系密切的邏輯語(yǔ)句要盡量集中在一起 2,縮進(jìn):if else case for while語(yǔ)句需要縮...
    舍予先生閱讀 676評(píng)論 0 0

友情鏈接更多精彩內(nèi)容