锁定文件包含软件包管理器对项目的依赖项解析结果。软件包管理器使用锁定文件在解析软件包依赖项图时提供确定性结果。当 Unity 软件包管理器计算出成功的解析结果时,它会将该解析结果存储在项目Packages
文件夹中的一个名为packages-lock.json
的 JSON 文件中。对项目清单每个 Unity 项目都有一个项目清单,它充当软件包管理器的入口点。此文件必须位于<project>/Packages
目录中。软件包管理器使用它来配置许多内容,包括该项目的依赖项列表,以及查询软件包的任何软件包存储库。更多信息
请参阅术语表或可变您可以更改可变软件包的内容。这与不可变相反。只有本地软件包和嵌入式软件包是可变的。
请参阅术语表软件包的清单(嵌入式或从本地文件夹安装)进行的任何修改都可能迫使软件包管理器重新计算已解析的软件包版本。但是,只要锁定文件中的软件包版本满足依赖项版本和解析策略隐含的范围,该软件包就会锁定在该版本。
例如,以下是锁定文件中的一般条目
"com.unity.textmeshpro": {
"version": "2.0.1",
"depth": 0,
"source": "registry",
"dependencies": {
"com.unity.ugui": "2.0.0"
},
"url": "https://packages.unity.com"
},
etc.
当软件包管理器解析任何冲突的间接依赖项当您的项目请求一个本身“依赖于”另一个软件包的软件包时,就会发生间接或传递依赖项。例如,如果您的项目依赖于[email protected]
软件包,而该软件包又依赖于[email protected]
软件包,那么您的项目对 Alembic 具有直接依赖项,对 Timeline 具有间接依赖项。更多信息
请参阅术语表时,它会尝试尽可能多地重复使用已锁定的软件包。这保证了后续的依赖项解析对于同一组依赖项产生相同的结果。它还最大限度地减少了下载、提取或复制软件包等耗时操作。
如果没有仅包含已锁定软件包的解决方案,则软件包管理器会选择风险最低的软件包升级集,优先选择补丁升级而不是次要或主要升级,优先选择次要升级而不是主要升级。实际上,您可以自定义升级的风险级别。有关更多信息,请参阅自定义解析策略。
要强制刷新间接依赖项版本,请删除锁定文件。
不要手动修改锁定文件:软件包管理器创建并维护锁定文件,因此它会覆盖您对文件所做的任何更改。
将锁定文件置于源代码管理之下,以便您可以始终如一地复制相同的软件包集,以确保您的项目随着时间的推移和在不同的机器上保持一致。
默认情况下,软件包管理器在成功计算依赖项图时会创建或更新锁定文件。如果您看到意外的结果,可以在项目清单中将enableLockFile属性设置为false
以禁用锁定。但是,如果您禁用锁定文件,软件包管理器会再次克隆Git URL软件包,这会导致性能下降和网络使用量增加。如果在两次解析之间将较新的提交推送到远程 Git 存储库,也可能导致不确定的结果。