我的簡單問題是:爲什麼我不能在我的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. /fp:strict和/ fp之間的區別:精確?
- 2. DLL包裝和DLL之間的區別
- 3. mysql基本版和社區版本之間的區別
- 4. 硬包裝和軟包裝之間的區別?
- 5. Java paintComponent覆蓋版本5和版本6之間的區別
- 6. IAB版本2和版本3之間的區別
- 7. 二進制版本和源代碼版本之間的區別?
- 8. Javascript包裝方法之間的區別
- 9. OpenSSL TLS/SSL版本之間的區別
- 10. IE6版本之間的區別
- 11. MySQL發佈版本之間的區別
- 12. DB2版本之間的區別
- 13. Apache Storm版本之間的區別?
- 14. Android SDK版本之間的區別
- 15. Oracle版本之間的區別
- 16. VSE版本和Vyatta Core版本之間有什麼區別AMI
- 17. 從版本的工作區和最新版本之間有什麼區別
- 18. 如何區分MySQL GA版本和里程碑版本之間的區別
- 19. NSURLConnection和NSUrlSession之間的確切區別?
- 20. 包含和塊之間的區別Jade
- 21. msbuild發佈和包之間的區別
- 22. 類和包之間的區別
- 23. 溢出包裝和分詞之間的區別?
- 24. 「包裝」和「方法」描述符之間的區別?
- 25. yarn.lock和npm的包裝鎖之間有什麼區別?
- 26. 容器和包裝器之間的區別
- 27. Maven範圍編譯和提供JAR包裝之間的區別
- 28. 包裝,橋樑和介體之間的區別是什麼?
- 29. 數組和包裝列表之間的區別?
- 30. 包裝和併發集合之間的區別
很好的解釋,謝謝! – user2061057
我不確定我是否按照你的第二段。在NPM中,每個模塊都不是「它自己的依賴樹」嗎?換句話說,不是NPM OK,它有兩個衝突版本的傳遞依賴關係,因爲它使它們保持獨立? – jrahhali
是的,但是如果2個軟件包共享相同的依賴關係,則npm只能在node_modules的頂級安裝該dep一次。 https://docs.npmjs.com/how-npm-works/npm3-nondet這篇文檔是針對npm3的,但它仍然適用。 – user2301179