react-router-dom已依赖react-router,为何仍需显式同时安装两个包?
显式同时安装两个包的核心原因如下:
- 避免版本不匹配问题
虽然react-router-dom的依赖里已经声明了对应版本的react-router,但如果你的项目中存在其他依赖也引入了不同版本的react-router,包管理器的依赖提升逻辑可能会把不符合预期的react-router版本提升到项目顶层,进而引发兼容性bug。显式同时指定两个包的版本为@6,可以强制项目顶层的两个关联包版本严格对齐,从根源上避免同生态包版本不一致的问题。 - 项目依赖语义更清晰
显式在项目package.json中声明react-router的版本,所有维护项目的开发者都能直接看到当前项目使用的react-router生态的大版本,不需要深入到子依赖的配置文件中查询对应信息,后续做版本升级、生态兼容排查时效率更高。 - 屏蔽包管理器的行为差异
不同包管理器(npm v6/v7+、pnpm、yarn不同版本)的依赖解析、提升逻辑存在差异,甚至同一个包管理器在不同安装环境下的依赖树结构都可能有区别。显式安装需要的关联包,可以保证不管用什么工具安装,项目的依赖结构都是符合预期的,避免出现本地运行正常、线上打包报错的诡异问题。
通常小项目单独安装react-router-dom@6也能正常运行,官方推荐同时安装两个包是前端工程化的通用最佳实践,目的是降低大项目、多人协作场景下的依赖维护成本。
内容的提问来源于stack exchange,提问作者Anton Komyshan
相关产品推荐
相关产品推荐

