我的简单问题是:为什么我不能在我的package.json中使用精确的版本呢?这跟锁文件有什么区别?
发布于 2017-05-31 15:41:09
主要的区别是锁文件还锁定嵌套的依赖项--依赖项的所有依赖项,等等。管理和跟踪所有这些更改是非常困难的,使用的包数量可以成倍增长。
在某些情况下,您不能手动指定应该使用包的特定版本--考虑分别在~1.0.0和~2.0.0指定~1.0.0和~2.0.0的两个库。主要版本的差异告诉我们,foo@v1的API与foo@v2的API不匹配,因此您不可能在应用程序级别覆盖包版本而不会导致冲突和失败。
最后,您可能会想:“那么,为什么要有义项呢?为什么不让所有的包手动指定它们依赖项的确切版本呢?”semver的主要优点之一是,它意味着您不必在子依赖项更新时更新树中的每个依赖项。如果我依赖于foo,而foo则依赖于bar,而bar刚刚修复了一个关键的bug,而且我们对所有东西都使用了精确的版本,那么在得到修复之前,foo也必须进行更新。如果foo和bar有不同的维护人员,或者foo被放弃,这可能需要一段时间,我可能需要对项目进行分叉(我在Java-land中已经做了不止一次了)。
这对于维护库的生态系统非常有用,因为它从根本上减少了依赖树中每个节点所需的维护工作量,使提取库和模式变得更容易。我曾经有过一个早期的项目,我们正在构建一个使用精确版本的组件库,每当包含共享功能的核心库被更新时,我们必须向其他每个包提交一个PR来更新版本,有时还会对依赖于这些版本的组件进行PR跟踪。不用说,几个月后我们合并了这些包裹。
希望这能帮上忙!
https://stackoverflow.com/questions/44276863
复制相似问题