npm 語(yǔ)義版本控制詳解
場(chǎng)景引入
開(kāi)發(fā)時(shí),經(jīng)常需要依賴(lài)一些模塊(包),我們進(jìn)行了下載之后,便一直在該版本的模塊環(huán)境下進(jìn)行開(kāi)發(fā),但是線上的服務(wù)器(其他開(kāi)發(fā)者)一般都是根據(jù)依賴(lài)來(lái)配置文件,重新下載各個(gè)模塊,但是保不齊某個(gè)模塊的版本已經(jīng)更新了,這時(shí)線上的包會(huì)更新到最新的版本,但你的代碼還是依據(jù)老版本來(lái)寫(xiě)的,這時(shí)可能會(huì)產(chǎn)生一些不知名的 Bug。
為了保持 JavaScript 生態(tài)系統(tǒng)的健康,可靠和安全,npm 軟件包進(jìn)行重大更新時(shí),建議在 package.json 文件中發(fā)布帶有更新版本號(hào)的軟件包的新版本,文件遵循語(yǔ)義版本規(guī)范。
遵循語(yǔ)義版本規(guī)范可以幫助依賴(lài)代碼的其他開(kāi)發(fā)人員了解給定版本中的更改范圍,并在必要時(shí)調(diào)整自己的代碼。
關(guān)于語(yǔ)義版本控制
為了幫助依賴(lài)你的代碼的開(kāi)發(fā)人員,建議在 1.0.0 開(kāi)始包版本并按如下方式遞增。npm 包的版本號(hào)的格式 x.y.z ,版本好的格式遵循 semver 2.0 規(guī)范。
代碼狀態(tài) | 階段 | 規(guī)則 | 示例版本 |
---|---|---|---|
首發(fā) | 新產(chǎn)品 New product |
從1.0.0開(kāi)始 | 1.0.0 |
向后兼容的錯(cuò)誤修復(fù) | 補(bǔ)丁發(fā)布 Patch release |
第三位數(shù)增加 | 1.0.1 |
向后兼容的新功能 | 次要發(fā)布 Minor release |
中間數(shù)字增加 并將最后一個(gè)數(shù)字重置為零 |
1.1.0 |
破壞向后兼容性的更改 | 主要發(fā)布 Major release |
第一個(gè)數(shù)字增加 并將中間和最后一個(gè)數(shù)字重置為零 |
2.0.0 |
版本規(guī)范識(shí)別
脫字符 ^
npm 通過(guò)脫字符(^)來(lái)限定所安裝模塊的主版本號(hào),而該脫字符對(duì)于不同的版本號(hào)有不同的更新機(jī)制。
- ^1.2.1 更新版本范圍為 >=1.2.1 && < 2.0.0 ;
- ^0.2.1 更新版本范圍為 >=0.2.1 && < 0.3.0 ;
- ^0.0.1 更新版本范圍為 0.0.2 (相當(dāng)于鎖定為了 0.0.2 版本);
波浪號(hào) ~
限定模塊的次要版本。
- ~1.2.1 更新版本范圍為 >=1.2.1 && < 1.3.0 ;
- ~0.2.1 更新版本范圍為 0.3.0 (相當(dāng)于鎖定為了 0.3.0 版本);
- 當(dāng)主版本號(hào)/次版本號(hào)/修訂版本號(hào)為 X or x or * 時(shí),那么 update 或 install 是會(huì)下載該分支最新的版本號(hào);
星號(hào) *
跟新或安裝模塊時(shí)會(huì)安裝>=0.0.0的最新版本
- 1.x 更新版本范圍為 >=1.0.0&&< 2.0.0 ;
- 1.2.x 更新版本范圍為 >=1.2.0&&< 1.3.0 ;
更多
1.可以把項(xiàng)目依賴(lài)的包固定在某一個(gè)版本,強(qiáng)制大家安裝相同的依賴(lài)樹(shù)
npm install react --save -E
上面命令會(huì)將 react 的版本號(hào)進(jìn)行固定,但是該方式只能控制項(xiàng)目中直接依賴(lài)的包的版本,無(wú)法控制項(xiàng)目模塊中依賴(lài)的包的版本號(hào),所以這種方式也無(wú)法讓不同的使用者得到相同的依賴(lài)樹(shù)。
2.使用 npm shrinkwrap ,可以將項(xiàng)目中的模塊版本進(jìn)行精確鎖定 運(yùn)行命令 npm shrinkwrap ,會(huì)產(chǎn)生一個(gè) npm-shrinkwrap.json 文件,這個(gè)文件保存了所有當(dāng)前使用的依賴(lài)模塊的版本。把該文件提交到 git 倉(cāng)庫(kù)中,這樣其他人在 clone 你的項(xiàng)目的時(shí)候,執(zhí)行 npm install 命令時(shí),npm 檢測(cè)到該文件中的信息會(huì)完整的還原出完全相同的依賴(lài)樹(shù)。
npm install --save-dev react // 安裝react npm prune // 清除未被使用的模塊 npm shrinkwrap
注:這種方式,安裝一個(gè)模塊包的方式顯得有些比較繁瑣
3.使用 yarn 可以得到模塊包精確控制的結(jié)果 yarn 是一個(gè)與 npm 兼容的 node 包管理器,使用它安裝 npm 包,會(huì)自動(dòng)在項(xiàng)目目錄創(chuàng)建一個(gè)yarn.lock 文件,該文件包含了當(dāng)前項(xiàng)目中所安裝的依賴(lài)包的版本信息,其他人在使用 yarn 安裝項(xiàng)目的依賴(lài)包時(shí)就可以通過(guò)該文件創(chuàng)建一個(gè)完全相同的依賴(lài)環(huán)境。
yarn init //使用yarn創(chuàng)建一個(gè)項(xiàng)目 yarn add <package> //使用yarn 安裝一個(gè)包
此外,yarn 除了可以自動(dòng)幫我們鎖定依賴(lài)包的版本,yarn 還在本地緩存已經(jīng)安裝過(guò)的包,當(dāng)再次安裝時(shí),直接從本地讀取即可。安裝速度得到大大提升。但 yarn 的使用需要整個(gè)團(tuán)隊(duì)都去使用,還是有一定的成本的。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
nodejs爬蟲(chóng)初試superagent和cheerio
這篇文章主要介紹了nodejs爬蟲(chóng)初試superagent和cheerio的相關(guān)知識(shí),非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2018-03-03node.js+express留言板功能實(shí)現(xiàn)示例
本文介紹基于nodejs+express+art-template的留言板功能。包含列表界面、添加界面和發(fā)送留言功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-09-09Nest.js Controller路由和請(qǐng)求處理強(qiáng)大功能解析
這篇文章主要為大家,介紹了Nest.js Controller路由和請(qǐng)求處理強(qiáng)大功能解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-12-12Sequelize中用group by進(jìn)行分組聚合查詢(xún)
大家都知道在SQL查詢(xún)中,分組查詢(xún)是較常用的一種查詢(xún)方式。分組查詢(xún)是指通過(guò)GROUP BY關(guān)鍵字,將查詢(xún)結(jié)果按照一個(gè)或多個(gè)字段進(jìn)行分組,分組時(shí)字段值相同的會(huì)被分為一組。在Node.js基于Sequelize的ORM框架中,同樣支持分組查詢(xún),使用非常簡(jiǎn)單方便。下面來(lái)看看詳細(xì)的介紹。2016-12-12node.js中使用ejs渲染數(shù)據(jù)的代碼實(shí)現(xiàn)
這篇文章主要介紹了node.js中使用ejs渲染數(shù)據(jù),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2023-11-11