NarraLeaf

项目依赖

项目如何记录它用到的插件、某个插件缺失或不兼容时会发生什么,以及构建出的游戏里会带上哪些插件

项目会记录它的文档实际用到了哪些插件。这张表存在 .nlproj 清单里,由扫描项目得出,从不手写。它回答两个问题:一台机器要装什么才能打开这个项目,以及从它构建出的游戏里应该带上哪些插件

在工作区侧边栏的 项目 → 依赖 中查看

硬依赖与软依赖

类型何时记录插件不在时
硬依赖项目引用了插件所拥有的类型——蓝图节点类型或控件类型文档是坏的,Studio 会介入
软依赖插件只写过项目存储什么都不会坏,仅作提示

一个插件可以两者兼具:既是硬依赖、又存了数据的插件,仍然算硬依赖

什么时候写入这张表

  • 打开项目时,Studio 先用已持久化的那张表做解析,再加载任何插件——这样在某个插件的 setup 有机会注册任何东西之前,就已经知道该跳过谁
  • 导出时,重新扫描并改写这张表,让导出的包精确记录它需要什么
  • 手动,用依赖面板里的 Rescan

打开这个面板只会解析当前状态,不会写清单

扫描只会重新推导那些已加载且贡献了类型的插件的条目。缺失或被禁用的插件的条目会被原样保留——一旦丢掉,你在没装该插件的机器上打开项目的那一刻,这条要求就被悄悄抹掉了

状态

状态含义
Ready已安装,且版本兼容
Outdated主版本号相同,但比项目创作时所依据的版本旧。仍会加载
Missing本机未安装
Incompatible已安装,但主版本号与项目创作时所依据的不同
Disabled处于 Missing 或 Incompatible 的硬依赖。该插件在这个项目里被跳过

兼容性只看主版本号:2.4.0 满足按 2.1.0 创作的项目,3.0.0 不满足。无法解析的版本号一律按不兼容处理

被跳过意味着什么

处于 Missing 或 Incompatible 的硬依赖会让该插件在这个项目里被跳过。Studio 根本不会 import 它的入口,因此 setup 不会运行,它的节点、控件和操作也都不会注册——由错误的主版本注册的节点类型,可能改写它已经读不懂的文档。你会收到一条指名该插件的警告,项目照常打开

跳过是按项目生效的。插件在别处仍然保持已安装、已启用

软依赖永远不会导致跳过

构建出的游戏里带上哪些插件

打包依据的是这张表,而不是已安装列表:

  • 只有硬依赖会被带上。 一个已启用、带 runtime 入口、但这个项目并没有用到的插件,不会进入包
  • 用到的类型没有提供方,构建就失败。 如果项目用到的某个节点或控件,没有任何随包插件在 contributes 中声明它,预览和导出会中止,并给出指明插件与类型的信息——而不是发行一个到了玩家机器上那个节点什么都不做的游戏
  • 完全没有这张表的项目(从未扫描、也从未导出)会回退到带上所有已启用的 runtime 插件。扫描或导出一次,选择就变精确了

版本号是一份契约

对插件作者来说,这一节直接影响你的用户:

  • 主版本号一变,所有按旧主版本创作的项目都会断。 那些项目会把你的插件标为 Incompatible 并跳过它。要打断兼容时才升主版本,别拿它表示「这个版本比较重要」
  • 保持类型 id 稳定。 项目按字符串保存节点和控件类型。改名是任何版本号都描述不了的破坏——新增新类型,把旧的继续注册着
  • 内置插件的版本跟随 Studio。 一次 Studio 更新就可能把某个项目变成 Incompatible;这套机制正是为这种情况建的

本页目录