我的简单问题是:为什么我不能在我的package.json中使用精确版本?这与锁文件有什么不同?yarn/npm5 lockfiles和精确包装版本之间的区别?
6
A
回答
5
主要区别在于lockfiles还会锁定嵌套的依赖关系 - 依赖关系的所有依赖关系,等等。管理和跟踪所有这些更改可能非常困难,并且使用的软件包数量可能呈指数增长。
还有一些情况下,您无法手动指定应使用某个特定版本的软件包 - 请考虑分别指定foo
分别为~1.0.0
和~2.0.0
的2个库。主要版本的差异告诉我们,foo @ v1的API不会与foo @ v2的API匹配,因此您无法在应用程序级别覆盖软件包版本,而不会导致冲突和故障。
最后,您可能会想:“为什么要在所有的时候都使用semver?为什么不让所有包都手动指定它们的依赖关系的确切版本?” semver的一个主要优点是它意味着当子依赖性更新时,不必更新树中的每个依赖项。如果我依赖foo
,并且foo
依赖于bar
和bar
只是有一个修补的重要bug,并且我们使用的是精确版本的所有内容,那么foo
也必须先更新,然后才能获得修复。如果foo和bar有不同的维护者,或者如果foo被抛弃了,那可能需要一段时间,我可能需要为项目分配一些东西(我在Java-land中做过的不止一次)。
这对维护库的生态系统非常有用,因为它从根本上减少了依赖树中每个节点所需的维护工作量,使得它更易于提取库和模式。我曾经有一个早期的项目,我们正在构建一个使用精确版本的组件库,并且任何时候包含共享功能的核心库都已更新,我们必须提交一个PR到,其他软件包的每个以更新版本,以及有时会追踪PR到依赖于那些的组件。毋庸置疑,我们在几个月后合并了这些软件包。
希望有帮助!
相关问题
- 1. DLL包装和DLL之间的区别
- 2. mysql基本版和社区版本之间的区别
- 3. 硬包装和软包装之间的区别?
- 4. Java paintComponent覆盖版本5和版本6之间的区别
- 5. Javascript包装方法之间的区别
- 6. IE6版本之间的区别
- 7. Apache Storm版本之间的区别?
- 8. MySQL发布版本之间的区别
- 9. VSE版本和Vyatta Core版本之间有什么区别AMI
- 10. 从版本的工作区和最新版本之间有什么区别
- 11. “包装”和“方法”描述符之间的区别?
- 12. yarn.lock和npm的包装锁之间有什么区别?
- 13. 数组和包装列表之间的区别?
- 14. Java的版本和JVM之间的区别究竟在哪里?
- 15. ninject的标准和非web版本之间的区别
- 16. JAR和包之间有什么区别?
- 17. .Net框架的版本v2.0.50727.3053和v2.0.50727.3074之间有什么区别?
- 18. Microsoft.Office.Interop。*版本12和14之间的区别是什么?
- 19. Office 2003和2007之间的VBA版本有区别吗?
- 20. iOS 8和以前版本之间自动转换的区别
- 21. openshift kubernetes版本和Google之间的区别kubernetes
- 22. Selenium Grid版本1和2之间的区别
- 23. 使用Zend Framework,模块和包装之间有什么区别
- 24. '+ ='和'= +'之间的区别?
- 25. {!!之间的区别!!}和{{}}
- 26. ==和case之间的区别?
- 27. '#','%'和'$'之间的区别
- 28. | =和^ = css之间的区别
- 29. “%〜dp0”和“。\”之间的区别?
- 30. .eq之间的区别。和==
很好的解释,谢谢! – user2061057
我不确定我是否按照你的第二段。在NPM中,每个模块都不是“它自己的依赖树”吗?换句话说,不是NPM OK,它有两个冲突版本的传递依赖关系,因为它使它们保持独立? – jrahhali
是的,但是如果2个软件包共享相同的依赖关系,则npm只能在node_modules的顶级安装该dep一次。 https://docs.npmjs.com/how-npm-works/npm3-nondet这篇文档是针对npm3的,但它仍然适用。 – user2301179