javascript - yarn.lock 文件中同一个包的多个版本
问题描述
我在 yarn.lock 中看到一个包的 3 个不同版本,例如:
angular@1.6:
version "1.6.10"
resolved "https://registry.yarnpkg.com/angular/-/angular-1.6.10.tgz#eed3080a34d29d0f681ff119b18ce294e3f74826"
integrity sha512-PCZ5/hVdvPQiYyH0VwsPjrErPHRcITnaXxhksceOXgtJeesKHLA7KDu4X/yvcAi+1zdGgGF+9pDxkJvghXI9Wg==
angular@>=1.4.0, angular@^1.0.8:
version "1.7.7"
resolved "https://registry.yarnpkg.com/angular/-/angular-1.7.7.tgz#26bd87693deadcbd5944610a7a0463fc79a18803"
integrity sha512-MH3JEGd8y/EkNCKJ8EV6Ch0j9X0rZTta/QVIDpBWaIdfh85/e5KO8+ZKgvWIb02MQuiS20pDFmMFlv4ZaLcLWg==
angular@~1.2.0:
version "1.2.32"
resolved "https://registry.yarnpkg.com/angular/-/angular-1.2.32.tgz#df52625a5167919931418dda3a9208b9f5fa3db4"
integrity sha1-31JiWlFnkZkxQY3aOpIIufX6PbQ=
这是否意味着最终的包包含所有这些,否则 webpack 怎么知道要选择哪个版本?社区中处理该问题的最佳做法是什么?我知道--flat
选项,但有数千个包,我需要一段时间才能为每个包选择一个。
解决方案
要调查安装了多少次依赖以及哪些软件包依赖于它(递归),请运行yarn why <package-name>
:
查看是否可以升级(或降级)某些包,以确保包中的所有依赖项都使用相同版本的 angular。
例如yarn why execa
::
yarn why v1.22.5
[1/4] Why do we have the module "execa"...?
[2/4] Initialising dependency graph...
[3/4] Finding dependency...
[4/4] Calculating file sizes...
=> Found "execa@4.0.3"
info Has been hoisted to "execa"
info Reasons this module exists
- "workspace-aggregator-c3b3be41-6d00-4635-98a6-d5373b215152" depends on it
- Specified in "devDependencies"
- Hoisted from "_project_#pretty-quick#execa"
- Hoisted from "_project_#@tahini#nc#execa"
- Hoisted from "_project_#execa"
- Hoisted from "_project_#jest#@jest#core#jest-changed-files#execa"
info Disk size without dependencies: "136KB"
info Disk size with unique dependencies: "520KB"
info Disk size with transitive dependencies: "736KB"
info Number of shared dependencies: 19
=> Found "lint-staged#execa@2.1.0"
info This module exists because "_project_#lint-staged" depends on it.
info Disk size without dependencies: "76KB"
info Disk size with unique dependencies: "400KB"
info Disk size with transitive dependencies: "616KB"
info Number of shared dependencies: 19
=> Found "sane#execa@1.0.0"
info This module exists because "_project_#jest-haste-map#sane" depends on it.
info Disk size without dependencies: "40KB"
info Disk size with unique dependencies: "328KB"
info Disk size with transitive dependencies: "524KB"
info Number of shared dependencies: 16
=> Found "create-folder-structure#execa@2.1.0"
info Reasons this module exists
- "_project_#create-folder-structure#pretty-quick" depends on it
- Hoisted from "_project_#create-folder-structure#pretty-quick#execa"
info Disk size without dependencies: "76KB"
info Disk size with unique dependencies: "400KB"
info Disk size with transitive dependencies: "616KB"
info Number of shared dependencies: 19
=> Found "term-size#execa@0.7.0"
info This module exists because "_project_#nodemon#update-notifier#boxen#term-size" depends on it.
info Disk size without dependencies: "36KB"
info Disk size with unique dependencies: "324KB"
info Disk size with transitive dependencies: "520KB"
info Number of shared dependencies: 16
笔记:
- 有时,开发依赖会导致这种情况。
推荐阅读
- dynamics-crm - 无法在业务流程中添加工作流显示名称
- javascript - 如何在 VueJs 中使用 axios 创建 api 服务?
- mysql - MySQL Workbench 无法检测到任何正在运行的 MySQL 服务器。解决方案?
- linux - Bash 脚本说它在我的终端上有无效的选项
- sql - 为什么不应该在 SQL 模式中表示冗余状态?
- python - 在功能性 Keras API 中使用 tf.keras.metrics.Mean 时出错
- linux - 在远程主机上运行 SSH 命令时,如何阻止美元符号在变量中扩展?
- php - 如何从数组中“释放”一个 XMLWriter?
- python - 在 Tkinter 画布中移动对象显示错误 #args 错误
- python - Jupyter Notebook中的Python Matplotlib get_xticklabels - 为什么它在与绘图代码相同的单元格中返回一个空白列表?