配置系统

Cocos Creator 扩展提供了一套配置管理机制,用于在扩展保存用户设置和数据。

配置类型

配置类型有两种:

  1. 编辑器配置(editor)
  2. 项目配置(project)

编辑器配置

编辑器配置用于存放一些编辑器相关的用户设置和数据,分成三个优先级,从高到低今次为:

  1. local -> global -> default

在进行配置数据获取时,会优先采用 local 中的配置项,若 local 中无对应配置项,则会采用 global 中的配置项,若 global 中也找不到对应配置项,则会采用默认的 default 配置。

项目配置

项目配置用于存放一些和项目相关的用户设置和数据,分成两优先级,从高到低为:

  1. local -> default

编辑器配置 的规则类似,在进行配置数据获取时,会优先采用 local 中的配置项,若 local 中无对应配置项,则会采用默认的 default 配置。

注册配置

若要使用配置系统,需要在扩展定义文件 package.jsoncontributions 字段中定义 profile 相关信息,如下所示:

  1. {
  2. "name": "hello-world",
  3. "contributions": {
  4. "profile": {
  5. "editor": {
  6. "test.a": {
  7. "default": 0,
  8. "message": "editorTestAChanged",
  9. "label": "测试编辑器配置"
  10. }
  11. },
  12. "project": {
  13. "test.a": {
  14. "default": 1,
  15. "message": "projectTestAChanged",
  16. "label": "测试项目配置"
  17. }
  18. }
  19. }
  20. },
  21. }

contributions.profile 相关的字段释义如下:

  • editor:{} - 编辑器配置
  • project:{} - 项目配置
  • test.a:{} - key 为 test.a 的配置项
  • default:any - 此配置项的默认值,可选参数
  • message:string - 此配置项被修改时会触发此消息,可选参数
  • label:string - 在可以显示配置的地方,可能会显示这个描述。支持 i18n:key 格式,可选参数

profile 相关的 TypeScript 接口定义如下:

  1. interface ProfileInfo {
  2. editor: { [ key: string ]: ProfileItem };
  3. project: { [ key: string ]: ProfileItem };
  4. }
  5. interface ProfileItem {
  6. // 配置的默认数据
  7. default: any;
  8. // 配置更改后,会自动发送这个消息进行通知
  9. message: string;
  10. // 简单的描述配置信息的作用,支持 i18n:key 语法
  11. label: string;
  12. }

读取与修改配置

导入扩展定义

  1. import packageJSON from '../package.json';

Editor.Profile.getConfig 最后一个参数为空的情况,会进行 优先级 匹配。

若指定了获取位置(localglobaldefault 三者之一),则会返回对应的值。如下所示,获取到的 localglobalundefined 是因为未对其进行设置。

  1. await Editor.Profile.getConfig(packageJSON.name, 'test.a'); // 0
  2. await Editor.Profile.getConfig(packageJSON.name, 'test.a', 'local'); // undefined
  3. await Editor.Profile.getConfig(packageJSON.name, 'test.a', 'global'); // undefined

修改编辑器配置

用以下代码修改配置后再调用 getConfig 可以看到对应变化。

  1. await Editor.Profile.setConfig(packageJSON.name, 'test.a', 1);
  2. await Editor.Profile.setConfig(packageJSON.name, 'test.a', 'local', 2);
  3. await Editor.Profile.setConfig(packageJSON.name, 'test.a', 'global', 3);

读取项目配置

Editor.Profile.getProject 最后一个参数为空的情况,会进行 优先级 匹配。

若指定了获取位置(localdefault 二者之一),则会返回对应的值。如下所示,获取到的 localundefined 是因为未对其进行设置。

  1. await Editor.Profile.getProject(packageJSON.name, 'test.a'); // 1
  2. await Editor.Profile.getProject(packageJSON.name, 'test.a', 'local'); // undefined

修改项目配置

用以下代码修改配置后再调用 getProject 可以看到对应变化。

  1. await Editor.Profile.setProject(packageJSON.name, 'test.a', 1);
  2. await Editor.Profile.setProject(packageJSON.name, 'test.a', 'local', 2);

存储路径

编辑器配置存储路径

层级路径
local{projectPath}/profiles/v2/extensions/{extensionName}.json
global(mac)Users/{name}/.CocosCreator/profiles/v2/extensions/{extensionName}.json
global(window)c/Users/{name}/.CocosCreator/profiles/v2/extensions/{extensionName}.json
default{extensionPath}/package.json

项目配置存储路径

层级路径
local{projectPath}/settings/v2/extensions/{extensionName}.json
default{extensionPath}/package.json