欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Node工程的依賴包管理方式

 更新時間:2023年04月23日 09:12:30   作者:京東云開發(fā)者  
在前端工程化中,JavaScript 依賴包管理是非常重要的一環(huán)。依賴包通常是項目所依賴的第三方庫、工具和框架等資源,它們能夠幫助我們減少重復(fù)開發(fā)、提高效率并且確保項目可以正確的運行。本文詳細介紹了Node工程的依賴包管理方式,感興趣的同學(xué)可以參考一下

在前端工程化中,JavaScript 依賴包管理是非常重要的一環(huán)。依賴包通常是項目所依賴的第三方庫、工具和框架等資源,它們能夠幫助我們減少重復(fù)開發(fā)、提高效率并且確保項目可以正確的運行。

目前比較常見的前端包管理器有 npm 和 Yarn,npm 是 Node.js 自帶的包管理器,它可以安裝、共享和分發(fā) node.js 模塊。最近pnpm也挺火的,通過并行下載和安裝依賴項,在執(zhí)行安裝、更新、刪除等操作時也更快。

但無論使用哪個包管理器,都要通過 package.json 文件的版本控制功能,保證在不同開發(fā)環(huán)境中的一致性。那么,package.json是如何進行依賴包管理的呢?我們來一起深入了解一下package.json的配置方式。

一、分類管理

根據(jù)package.json規(guī)范,依賴包被大致分為以下幾種:dependencies、devDependencies、optionalDependencies、peerDependencies和bundledDependencies總共5種。dependencies和devDependencies這兩項是我們使用較為頻繁的。

1、dependencies

工程在生產(chǎn)環(huán)境下也需要使用的依賴,例如react、antd等,使用npm安裝插件時,會默認寫入dependencies,也可以使用-P或--save-prod后綴。

2、devDependencies

工程只有開發(fā)環(huán)境需要,生產(chǎn)環(huán)境不需要的依賴,例如eslint、babel等,使用-D或--save-dev來寫入devDependencies。

3、optionalDependencies

顧名思義,依賴是可選的,它們只有在運行時需要使用某些功能時才會被引入。通常用于實現(xiàn)某些可選的功能或優(yōu)化。例如,一個包可能依賴于某個庫來實現(xiàn)某種高級功能,但是這個庫在某些環(huán)境下不存在或不可用。在這種情況下,可以將該庫聲明為可選依賴項,并在代碼中檢查該依賴項是否存在,然后根據(jù)情況來決定是否使用該高級功能。使用這個功能的工程比較少,使用-O或--save-optional來寫入optionalDependencies。

4、peerDependencies

工程需要和這個依賴配套使用,一般用于解決插件依賴的核心庫的版本和主項目依賴的核心庫的版本不一致的問題,常見于開發(fā)配套插件。例如vuex@4.1.0聲明了:

"peerDependencies": {
   "vue": "^3.2.0"
}

表明vuex@4.1.0需要和vue@^ 3.2.0一起安裝和使用,否則可能會出現(xiàn)異常。使用-O或--save-optional來寫入optionalDependencies。

5、bundledDependencies

工程依賴于某些特定的依賴項,并且希望在運行時不必再次下載它們,則可以使用該選項。npm pack會將這些依賴一同放入生成的包中,并且在npm install時本工程,這些依賴項也會被一同安裝。使用-B或--save-bundle來寫入bundledDependencies。

看到這里你可能會有點疑問,為什么npm沒有提供類似--save-peer的指令來寫入peerDependencies呢?原因是peerDependencies暗示本工程將會被其他主模塊使用,但是主模塊本身并不需要在項目代碼中顯式使用。因此官方?jīng)]有支持這一指令。

二、版本管理

一般情況下,以上依賴配置(除了bundledDependencies)都需要指定依賴的版本號,版本號遵循semver語義化版本規(guī)范(Semantic Versioning)命名規(guī)則,可以用下圖表示,如2.1.0、3.1.4-beta.2等。

  • 當(dāng)發(fā)生不兼容的 API 修改時,更新major位
  • 當(dāng)做了向下兼容的功能性新增時,更新minor位
  • 當(dāng)做了向下兼容的問題修正時,更新patch位

可選的-tags即先行版本號,可以作為發(fā)布正式版之前的版本,格式是在修訂版本號后面加上一個連接號(-),再加上一連串以點(.)分割的標(biāo)識符,標(biāo)識符可以由英文、數(shù)字和連接號([0-9A-Za-z-])組成。

在 npm 的依賴的規(guī)則中,還有~、>、<、=、>=、<=、-、||、x、X、*等符號來描述適用的版本范圍;

  • ^ :表示只鎖定major,不小于指定版本號的版本范圍。例如^1.1.0,代表>=1.1.0 <2.0.0的版本范圍。

  • ~ :表示鎖定major和minor,不小于指定版本號的版本號。例如~1.1.0,代表>=1.1.0 <1.2.0的版本范圍。

  • x、X、*:表示通配符。例如1.1.x,也代表>=1.1.0 <1.2.0的版本范圍。

默認情況下,若指定了一個版本范圍,npm會在范圍內(nèi)安裝最新版本的依賴。當(dāng)使用 npm install XX 時,會安裝當(dāng)前最新版本,并在版本號前默認加上 ^ 符號。因此在安裝運行老項目時,很容易出現(xiàn)安裝依賴后,項目啟動報錯的情況,原因就是某些依賴沒有做到很好的向下兼容,導(dǎo)致重新安裝的版本太高造成兼容性錯誤,此時需要定位錯誤依賴并回退版本。

三、npm install加載機制

npm install核心流程大致分為以下5步:

1、npm 向 registry 查詢依賴壓縮包的網(wǎng)址。
2、下載壓縮包,存放在cache目錄,供下次安裝時使用。
3、解壓壓縮包到當(dāng)前項目的node_modules目錄。
4、把所有安裝的包信息寫入package-lock.json,供下次安裝時使用。
5、繼續(xù)處理依賴的依賴。

install的過程速度也和每一個步驟息息相關(guān):
(1)共享工程package-lock.json,可以避免向registry查詢的步驟,并且保證不同環(huán)境下安裝包的一致性。
(2)使用下載速度快的registry鏡像(例如jd鏡像)。
(3)預(yù)先進行依賴關(guān)系分析構(gòu)建依賴關(guān)系,然后最后再并行下載(例如yarn)。

希望以上的介紹能夠幫助你更好的理解npm的依賴管理。

到此這篇關(guān)于Node工程的依賴包管理方式的文章就介紹到這了,更多相關(guān)Node依賴包管理方式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Node.js多進程的方法與參數(shù)實例說明

    Node.js多進程的方法與參數(shù)實例說明

    這篇文章主要介紹了Node.js多進程的方法與參數(shù)實例說明,Node.js 是以單線程的模式運行的,但它使用的是事件驅(qū)動來處理并發(fā),這樣有助于我們在多核 cpu 的系統(tǒng)上創(chuàng)建多個子進程,從而提高性能,需要的朋友可以參考下
    2023-05-05
  • Node.JS如何實現(xiàn)JWT原理

    Node.JS如何實現(xiàn)JWT原理

    jwt是json web token的簡稱,本文介紹它的原理,最后后端用nodejs自己實現(xiàn)如何為客戶端生成令牌token和校驗token
    2020-09-09
  • node.js中的fs.lchownSync方法使用說明

    node.js中的fs.lchownSync方法使用說明

    這篇文章主要介紹了node.js中的fs.lchownSync方法使用說明,本文介紹了fs.lchownSync的方法說明、語法、接收參數(shù)、使用實例和實現(xiàn)源碼,需要的朋友可以參考下
    2014-12-12
  • Node.js 8 中的重要新特性

    Node.js 8 中的重要新特性

    這篇文章主要介紹了Node.js 8 中的重要新特性的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • 詳解Node.js如何處理ES6模塊

    詳解Node.js如何處理ES6模塊

    學(xué)習(xí)JavaScript語言,你會發(fā)現(xiàn)它有兩種格式的模塊。一種是ES6模塊,簡稱ESM;另一種是Node.js專用的CommonJS模塊,簡稱 CJS。這兩種模塊不兼容。很多人使用Node.js,只會用require()加載模塊,遇到ES6模塊就不知道該怎么辦。本文就來談?wù)凟S6模塊在Node.js里面怎么使用。
    2021-05-05
  • node.js文件上傳重命名以及移動位置的示例代碼

    node.js文件上傳重命名以及移動位置的示例代碼

    本篇文章主要介紹了node.js文件上傳重命名以及移動位置的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-01-01
  • socket.io實現(xiàn)在線群聊功能

    socket.io實現(xiàn)在線群聊功能

    這篇文章主要為大家詳細介紹了socket.io實現(xiàn)在線群聊功能的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • nodeJS刪除文件方法示例

    nodeJS刪除文件方法示例

    這篇文章主要介紹了nodeJS刪除文件方法,結(jié)合實例形式分析了nodeJS實現(xiàn)文件與目錄的獲取、遍歷與刪除相關(guān)操作技巧,需要的朋友可以參考下
    2016-12-12
  • Node.js動手擼一個靜態(tài)資源服務(wù)器的方法

    Node.js動手擼一個靜態(tài)資源服務(wù)器的方法

    這篇文章主要介紹了Node.js動手擼一個靜態(tài)資源服務(wù)器的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-03-03
  • 解決node.js中bcrypt遇到的安裝問題

    解決node.js中bcrypt遇到的安裝問題

    這篇文章主要介紹了解決node.js中bcrypt遇到的安裝問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-10-10

最新評論