【W(wǎng)eb前端】npm之概念篇

package/module

包就是一個有單個或多個文件的目錄,其中有個文件package.json帶有這個包的元信息

一般有三種類型的包
  • server端nodejs工程使用的各種模塊
  • 供命令行使用的各種功能命令支持
  • 前端工程使用的各種模塊
安裝方式
  • local:一般是作為項(xiàng)目工程代碼引用的模塊時
  • global:一般是作為命令行工具使用時,全局的npm包安裝在C:\User<username>\AppData\Roaming\npm目錄下
安裝

npm install命令會在當(dāng)前目錄創(chuàng)建node_modules目錄,然后把包下載到這個目錄下
如果當(dāng)前目錄下沒有package.json文件,那么會安裝最新版本的包;如果存在,則按照文件里指定的版本規(guī)則來下載匹配規(guī)則的最高版本的包
一般來說,包的首次安裝才使用install,后續(xù)的版本更新應(yīng)該使用update;如果是對已安裝包的再次install,那么可以認(rèn)為是先進(jìn)行一次uninstall在install的行為

package.json

name和version字段是必須的,其他都是可選的;
dependencies字段指production構(gòu)建引用的包;
devDependencies字段指只在開發(fā)和測試階段引用的包;
dependencies和devDependencies兩個字段里依賴包除了使用版本規(guī)則外,還可以使用本地路徑來引用本地的包

dist-tags

為了組織和標(biāo)記不同版本的包(比如穩(wěn)定版和開發(fā)版,完整版和精簡版等等),使用了dist-tags的概念,有點(diǎn)類似版本管理的不同分支的理念。
默認(rèn)情況下發(fā)布的包會使用latest標(biāo)記,而使用npm install <包名>來安裝的話,會默認(rèn)使用latest標(biāo)記;如果需要指定標(biāo)記的話,可以使用 npm install <包名>@<tag>這樣的形式

包和模塊

包(Package):一個包含有通過package.json文件描述的程序的目錄
另外,其他的衍生形式,如對這個目錄進(jìn)行壓縮或打包后的文件,或指向這個文件的鏈接等等這些也都屬于包的概念范疇,因?yàn)樽罱K這些衍生形式都能歸結(jié)到上述定義中
模塊(Module):能夠通過require函數(shù)被node.js程序加載的東西,它可能以下面的形式呈現(xiàn):

  • 存在package.json文件的目錄,且package.json文件存在main字段
  • 帶有index.js文件的目錄
  • 一個JavaScript文件

所以大部分情況下,包都會是一個模塊,但是包不一定必須是一個模塊!

依賴

npm3的依賴包很有可能本身也依賴著其他包,這就帶來同個包的不同版本被不同的依賴包所依賴的問題,npm2是通過每個依賴包的依賴又存放在自己的node_module目錄下這種嵌套方式來解決的,而npm3則改進(jìn)了一下,按照安裝順序,首個被安裝的二次依賴包會平放在頂級的node_module目錄下,后續(xù)的不同版本二次依賴包則沿用npm2的嵌套方式解決;
因?yàn)閚pm3的這種依賴解決方式導(dǎo)致其依賴樹的形狀是與安裝順序有關(guān)的,所以同樣的package.json文件因?yàn)樵诓煌瑱C(jī)器下會有依賴樹形狀不一樣的情況(但是不會影響具體的構(gòu)建),這也是npm3所說的node_module或依賴樹的不確定性;如果真的需要保持大家的依賴樹一致,那可以在每次package.json改動后,刪除node_module目錄,然后重新install;

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

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

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,724評論 19 139
  • 題目1: 如何全局安裝一個 node 應(yīng)用? Node模塊采用npm install命令安裝。 每個模塊可以“全局...
    蕭雪圣閱讀 1,859評論 0 1
  • Node.js使得在服務(wù)器端使用JavaScript編寫應(yīng)用程序成為可能。它是基于V8Javascript運(yùn)行時并...
    間陽幕賓閱讀 1,691評論 0 5
  • JavaScript 模塊化編程 網(wǎng)站越來越復(fù)雜,js代碼、js文件也越來越多,會遇到什么問題? 命名沖突; 文件...
    magic_pill閱讀 1,597評論 0 1
  • 當(dāng)我對你說出所有的擔(dān)憂,與抱怨時,我的朋友你會把那些擔(dān)憂蓋在我的頭上嗎?
    小樣兒jing閱讀 168評論 0 0

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