有個專案的安全性報告顯示需要把某個套件(packageA)依賴的另一個套件(packageB)版本提升如:
packageB@1.0.0 -> packageB@2.0.0
正常來說就是看packageA新的版本有沒有主動提升packageB@2.0.0,
但是packageA當下最新的版本依然是使用packageB@1.0.0的情況下,我的作法是在專案的package.json裝了packageB@2.0.0,然後把package.lock.json裡packageA針對packageB的安裝從dependencies改為peerDependencies,因為有可能packageB被好幾個套件都用到,並且不同套件依賴的packageB有各自的版本,peerDependencies可以達到統一版本
packageA: {
...
peerDependencies:{
packageB: ^2.0.0
}
}
改完後需要重新update packageB,package.lock.json會讓packageA在安裝packageB時以我主動裝的packageB@2.0.0為依賴對象,就不會再裝本來的packageB@1.0.0,先不論強制升級套件不提供的版本合理性,單純以"自行更改某套件下的相依套件使用特定版本"這件事改法是對的方式嗎?
因為我只要一更新packageA版本,package.lock.json就會被覆蓋變回他本來的packageB@1.0.0,想問的第二個問題是如果我自行改了package.lock.json,有沒有可能藉由設定某些參數讓自訂的peerDependencies即使在更新後還能保留?
題外話,看了網路的文章,針對peerDependencies好像都是開發套件作者把一些覺得需要限制版本的套件才寫在package.json的peerDependencies裡,讓其他人安裝後有相依性
套件版本是一定要達到報告所要求的版本,或是有其他想法也可以提出,謝謝