4.1.4 入口程序

优质
小牛编辑
129浏览
2023-12-01

每一个插件都可以指定一份入口程序,入口程序是在 主进程 中被执行的。通常我们会在入口程序中:

  • 初始化扩展包
  • 执行后台操作程序(文件I/O,服务器逻辑)
  • 调用 Cocos Creator 主进程中的方法
  • 管理扩展面板的开启和关闭,以及响应主菜单和其他面板发送来的 IPC 消息

这里有一份入口程序的最简单样例:

'use strict';

module.exports = {
  load () {
    console.log('package loaded');
  },

  unload () {
    console.log('package unloaded');
  },
};

生命周期回调

load

当扩展包正确载入后,将会执行用户入口程序中的 load 函数。我们可以在这里做一些关于扩展包本身的初始化操作。

unload

当扩展包卸载进行到最后阶段,将会执行用户入口程序中的 unload 函数。我们可以在这里做一些扩展包卸载前的清理操作。

加载和卸载注意事项

Cocos Creator 支持在编辑器运行时动态的添加和删除扩展包,所以要注意如果扩展包依赖编辑器其他模块的特定工作状态时,必须在 loadunload 里进行妥善处理。如果插件的动态加载和卸载导致其他模块工作异常时,扩展包的用户总是可以选择关闭编辑器后重新启动。

IPC 消息注册

在入口程序中添加 messages 字段,可以让扩展包在加载的时候进行主进程的 IPC 消息注册。样例如下:

'use strict';

module.exports = {
  messages {
    'foo-bar' ( event ) { console.log('hello foobar'); },
    'scene:saved' ( event ) { console.log('scene saved!'); },
  },
};

通过上面的例子,我们可以看到注册的 IPC 消息接受两种格式:

短命名消息

短命名消息是指消息名不带 : 的消息。这些消息将被视为该扩展包内的消息,在注册阶段,实际注册是,会被写成 ${你的扩展包名}:${消息名}。以上面的代码为例,假设我们的扩展包名字为 simple-demo,那么 foo-bar 这个消息实际注册时,将会扩展成 simple-demo:foo-bar

实际应用中,我们就可以通过 Editor.Ipc.sendToPackage 函数发送 IPC 消息到主进程的指定扩展包的注册函数中。

Editor.Ipc.sendToPackage('simple-demo', 'foo-bar');

当然,我们还有更多的消息发送策略,我们会在后续的章节中进行详细介绍。

全名消息

全名消息就是指消息名中带有 : 的消息命名方式。通常我们书写全名消息是为了监听其他扩展包,或者其他模块的 IPC 消息。通过全名消息很清晰地知道这份消息是从哪个扩展包中发出的,也更好的避免了消息冲突的问题。

如上面的例子,我们可以清楚的了解到,“scene:saved” 这个消息是从 scene 这个内置扩展中发送的。