当在 Package Manager 窗口中工作时,可以从多个来源(注册表、本地文件夹或 tarball、Git URL 以及通过名称)安装包。然而,虽然 Package Manager 可以从这些源无缝安装包,但它首先必须进行一系列计算来决定安装哪个版本。它还必须决定要安装哪些其他包和版本来为所选择的包提供支持。
直接依赖项
当您通过 Package Manager 窗口选择要安装的包版本时,您即是在向项目清单添加一个依赖项。这是一个声明,您需要特定包的特定版本才能使项目正常工作。要向项目添加依赖项,您需要在 <project-root>/Packages/manifest.json 文件的依赖项 (dependencies) 属性中以 package-name@package-version 的形式添加对包和版本的引用。这些被称为“直接”依赖项,因为项目直接依赖于它们。
间接依赖项
包也可能需要其他包才能进行工作。这些被称为“间接”(或传递性)依赖项。包开发人员在开发过程中将这些依赖项添加到包清单文件的依赖项 (dependencies) 属性中 (<package-root>/package.json)。例如,在下图中,alembic@1.0.7 包依赖于 timeline@1.0.0 包,因此 timeline 包是一个“间接”依赖项。相反,项目依赖于 cinemachine@2.6.0 和 alembic@1.0.7 包,因此它们都是“直接”依赖项。
版本覆盖
当添加某个包版本作为依赖项时,该版本不一定是 Package Manager 安装的版本。原因是 Package Manager 必须考虑项目中的所有依赖项,无论是直接依赖项还是间接依赖项。在以下示例中,所请求的 XR 插件管理 (XR Plugin Management) 包是版本 4.0.3。但是,Package Manager 安装了版本 4.0.6,因为另一个包依赖于更高的版本,如信息消息 (B) 所示:
依赖图
Package Manager 一次只能安装一个包版本,因此必须构建一个依赖图。该图列出了项目的每个直接和间接依赖项。依赖图决定了要安装的每个包的版本。
锁定文件
当 Package Manager 解决所有版本冲突后,会将解析结果保存在锁定文件中,原因有二: