依赖: ros-melodic-desktop 但是它将不会被安装_npm系列之依赖管理
1. 版本控制
npm依賴包使用語義化的版本號,讓開發者可以從版本號中推測修改。
版本號格式為:X.Y.Z
X:代表主版本號,只有更新了不向下兼容的API時才需要修改
Y:次版本號,當模塊增加了向下兼容的功能時需要修改
Z:補丁版本號,當模塊進行了向下兼容的bug修改時需要修改
npm有些符號可以用來限制版本,并且不同的符號有不同的更新版本號的規則
- 脫字符^,限定了安裝版本的主版本號
用npm install下的依賴,寫入package.json中時,就是使用的脫字符限定了版本號
當我們執行 npm update packageName時,因為使用了脫字符限定了主版本號(其他符號更新時,也與符號相關),所以只會更新該大版本號下的次版本號和修訂版本號更高的版本。但是有種情況例外,當主版本號為0時,這種是不穩定的版本,所以盡管用脫字符限制,但是次版本號一樣不會更新,只會更新修訂版本號
例:版本 ^1.2.1,可更新的范圍是 >1.2.1 && <2.0.0
例:當安裝了axios的0.1.0的版本,執行 npm update axios --ddd (調試,查看過程)。
沒有更新,因為沒有大于0.1.0的0.1.x版本
- 波浪號~,限定次要版本號
例:~1.5.1代表可更新范圍為>=1.5.1 && =< 1.6.0 - x,X,*和空可以替代版本號中的任意一段,表示該位置版本號沒有限制
例:x,X,*和空可以匹配任何版本(本地測試安轉時,會安裝最新版本)
1.x,可更新范圍是 >=1.0.0 && =<2.0.0 - 無符號,指定版本,如使用 vue-router: 3.0.7 只會安裝這個版本號的依賴
npm install會安裝滿足條件的最新版本。
問題:
npm install packageName@Y
npm install packageName@oldVersion
2. 版本鎖定
為什么需要鎖定依賴的版本?
在package.json中axios的依賴是 "axios": "^0.8.0",執行npm install時會安裝哪個版本?
- 安裝了版本0.8.1
明明在package.json中寫的是0.8.0,為什么安裝的是0.8.1?這版本不一樣啊?
- 因為準確的說package.json中寫的不是版本0.8.0,而是^0.8.0,前者是一個確定的版本,而后者是一個版本范圍。0.8.1是滿足這個條件的最新版本。
那么問題來了,這種依賴安裝的方式,那我們在本地開發和正式線上前的安裝,當需要多人協同開發的時候,安轉的依賴版本有可能不一樣。這樣可能就會導致一些,“我這里是好的,本地環境是好的”的奇怪問題。
那我們要怎么解決這個問題,使地大家都能安裝同一個版本的依賴?
npm在5.0.0(但在5.6.x的版本中才穩定下來)的版本中增加了package-lock.json文件,在此版本和更高的版本中,使用npm install時會自動生成此文件。
lock文件中有這個依賴安裝的特定版本、下載地址、驗證模塊完整性的hash以及它的依賴列表。
當項目中有package-lock.json文件時,會根據此文件安裝版本。使用npm更新依賴,則package-lock.json文件會被更新,package.json文件可能會更新(有時候不會,比如上面的axios的更新補丁版本號)。
那如果我手動修改了package.json文件,它和lock文件不一致了會怎么樣?
- 如果是在package.json中增加或刪除了依賴,npm install后會同步增加和刪除
- 如果是對版本號進行了修改
1. 如果修改后的版本不是之前范圍中符號固定不變的部分,則lock中的會跟著修改。
如圖,我將package.json中的axios由0.8.0改為了0.7.0,將vue-router由3.0.7改為了2.0.0
2. 如果修改后的版本沒有影響之前固定不變的部分,lock文件不會修改
如圖,我將package.json中的element-ui由2.10.1改為了2.9.1
lock文件中的并沒有改變,因為它的版本依舊是滿足依賴的新范圍,此時不一定是最新范圍。
所以在依賴降級時,要注意直接修改package.json中的版本號可能行不通。
當我們安裝依賴時版本不對,可能會刪掉package-lock和node_modules,重新npm install。
這種方式可能會導致,之前鎖定的版本被更新。
比如以前的lock鎖定了2.10.1,但是之后出來了2.10.2,重新install時,會安裝后一個版本。
3. package.json中的依賴分類
1)dependencies: 項目運行時的依賴
2)devDependencies: 項目開發時的依賴。
線上環境,可以使用npm install --production忽 略開發依賴。
3)peerDependencies: 項目當前依賴所在的宿主環境所需要安裝的依賴和版本
例如,element-ui的peerDependencies中有vue。如果安裝element-ul,沒有安裝vue,npm就會警告。
參考文章:
2018 年了,你還是只會 npm install 嗎??juejin.im前端工程化(5):你所需要的npm知識儲備都在這了 - 掘金?juejin.im總結
以上是生活随笔為你收集整理的依赖: ros-melodic-desktop 但是它将不会被安装_npm系列之依赖管理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 英文名网名104个
- 下一篇: 水浒传中豹子头是谁(浅析梁山好汉之豹子头