摘要:此命令創(chuàng)建和更新的文件將優(yōu)先于任何其他現(xiàn)有或?qū)⒂械奈募0踩惭b包被執(zhí)行前校驗(yàn)其完整性速度比快一些的鎖文件是能解決包版本不一致的情況
~和^的區(qū)別
最近總是碰到一些問題, 在本地好好的, 在線上就出現(xiàn)了問題, 本地也一直復(fù)現(xiàn)不了, 后來把node_modules目錄刪除了之后, 重新安裝, 就在本地復(fù)現(xiàn)了這個(gè)問題,可以看了git history, 并沒有人修改package.json中的版本號(hào),于是認(rèn)真的了解了一下package.json中庫的版本號(hào);
~和^的區(qū)別
"babel-loader": "^7.1.1", "body-parser": "~1.15.2"
npm install --save xxx, 會(huì)優(yōu)先考慮使用 ^而不是~
以版本號(hào)x.y.z為例
x:主版本號(hào), 當(dāng)你做了不兼容的API修改
y:次版本號(hào), 當(dāng)你做了向下兼容的功能性問題
z:修訂號(hào), 當(dāng)你做了向下兼容的問題修復(fù)
~x.y.z, 會(huì)更新到y(tǒng)最新的版本, 例如 body-parser: ~1.15.2, 這個(gè)庫會(huì)去匹配到1.15.z的最新版本, 如果出現(xiàn)了1.16.0, 則不會(huì)自動(dòng)升級(jí)
^x.y.z, 會(huì)更新到x的最新版本, 例如 babel-loader: ^7.1.1, 這個(gè)庫會(huì)去匹配7.y.z的最新版本, 如果出現(xiàn)了8.1.1, 則不會(huì)自動(dòng)升級(jí)
可以參考npm官方給出的解釋
^1.2.3 := >=1.2.3 <2.0.0
^0.2.3 := >=0.2.3 <0.3.0
^0.0.3 := >=0.0.3 <0.0.4
大多數(shù)情況下遵循這種版本號(hào)規(guī)則的依賴包都沒問題, 但是npm是開源的世界, 并不是所有的都嚴(yán)格遵循這種規(guī)則, 所以會(huì)出現(xiàn)上述的問題;
為什么需要package鎖有如下幾個(gè)可能原因, 在某些情況下, package.json是無法保證每個(gè)人自己電腦上執(zhí)行的 npm install 后安裝的依賴版本都是一樣的
1.如果package.json中記錄的依賴包的版本是一個(gè)版本范圍, 一旦執(zhí)行npm i 會(huì)導(dǎo)致這個(gè)包更新到最新版本
2.就算你依賴了一個(gè)固定版本的包(如A 1.1.1), 但你依賴的包A可能依賴其他的包B,而A在聲明依賴時(shí)可能也使用了semser命名, 如 ^1.2.3, 如果包B release 了新版, 也會(huì)導(dǎo)致包B會(huì)安裝到更新版本
3.不同人使用的npm程序的版本不同
如果依賴包的版本不一致, 會(huì)導(dǎo)致開發(fā)環(huán)境和生產(chǎn)環(huán)境產(chǎn)品不一致的行為; 或者導(dǎo)致不同團(tuán)隊(duì)成員之前也產(chǎn)品環(huán)境差異
如何解決包版本不一致的情況 1.npm 使用package-lock.json文件來解決這個(gè)問題執(zhí)行npm install會(huì)自動(dòng)生成package.json文件, 只要執(zhí)行普通的安裝, 更新等可能會(huì)修改 package.json的npm命令, 都會(huì)自動(dòng)同步修改package-lock.json文件
npm install xxx npm rm xxx npm update xxx2.npm 還支持npm-shrinkwrap.json, 和package-lock.json功能完全一樣
執(zhí)行 npm shrinkwrap來生成npm-shrinkwrap.json
此命令將根據(jù) package-lock.json 文件創(chuàng)建一個(gè)新的或覆蓋已有的 npm-shrinkwrap.json 文件。 此命令創(chuàng)建和更新的文件將優(yōu)先于任何其他現(xiàn)有或?qū)⒂械?package-lock.json 文件。
使用yarn主要有一下優(yōu)點(diǎn)
快速: 會(huì)緩存它下載的每個(gè)包,無需重復(fù)下載;能并行化操作以最大資源利用率
可靠:使用格式詳盡而又簡潔的 lockfile文件 和確定性算法來安裝依賴,能夠保證在一個(gè)系統(tǒng)上的運(yùn)行的安裝過程也會(huì)以同樣的方式運(yùn)行在其他系統(tǒng)上。
安全: 安裝包被執(zhí)行前校驗(yàn)其完整性
yarn速度比npm快一些, yarn的鎖文件是yarn.lock, 能解決包版本不一致的情況
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/109322.html
摘要:請注意,在版本號(hào)之前有個(gè)字符。理論上,次版本號(hào)的變化并不會(huì)影響向后兼容性。雖然可以通過命令關(guān)閉在版本號(hào)前面使用的默認(rèn)行為,但這個(gè)只會(huì)影響頂級(jí)依賴關(guān)系。 本文作者對(duì)比了當(dāng)前主流的包管理工具npm、yarn、pnpm之間的區(qū)別,并提出了合適的使用建議,以下為譯文: NPM npm是Node.js能夠如此成功的主要原因之一。npm團(tuán)隊(duì)做了很多的工作,以確保npm保持向后兼容,并在不同的環(huán)境中...
摘要:翻譯瘋狂的技術(shù)宅原文本文首發(fā)微信公眾號(hào)歡迎關(guān)注,每天都給你推送新鮮的前端技術(shù)文章本文描述了通過生成包的最小設(shè)置。是用于轉(zhuǎn)換的預(yù)設(shè)。有關(guān)這兩個(gè)屬性的更多信息設(shè)置多平臺(tái)包。表示使用上一節(jié)中的配置。結(jié)論以上是通過創(chuàng)建包最小庫的方法。 翻譯:瘋狂的技術(shù)宅原文:http://2ality.com/2017/07/npm... 本文首發(fā)微信公眾號(hào):jingchengyideng歡迎關(guān)注,每天都...
摘要:由于文件中版本號(hào)的特點(diǎn),下面三個(gè)版本號(hào)在安裝的時(shí)候代表不同的含義。安裝版本統(tǒng)一為了防止拉取到不同的版本,有一個(gè)鎖定文件記錄了被確切安裝上的模塊的版本號(hào)。 showImg(https://segmentfault.com/img/bVbs8Rg?w=1920&h=1080); 一位用不好包管理器的前端,是一個(gè)入門級(jí)前端,一個(gè)用不好webpack的前端,是一個(gè)初級(jí)前端 三個(gè)包管理器是可以一...
閱讀 1142·2021-10-27 14:13
閱讀 2645·2021-10-09 09:54
閱讀 915·2021-09-30 09:46
閱讀 2432·2021-07-30 15:30
閱讀 2177·2019-08-30 15:55
閱讀 3419·2019-08-30 15:54
閱讀 2858·2019-08-29 14:14
閱讀 2780·2019-08-29 13:12