开发 COCOS Creator 插件的较佳实践

随便挖一下以前的一个帖子,以前提过下

到目前为止,我也还没有想到什么好办法,解决这个问题

如果对你没用,不代表对其他人也没用 3.8.2版本的引擎创建扩展(插件)

配置复杂在什么地方? 对于 vite构建,如果不熟悉的人,我们确实不能指望通过我们的模板让他熟悉 vite 的用法。

但是对于一个想要开发编辑器拓展,特别是有面板需求的开发者,那么他首先就应该了解web 开发,我们只是抛砖引玉的给出一个实践方案,“如何享受vite 的高效构建,又可以享受 vue react 等的丰富生态”

而我们的插件,对于一个 常规的 vite 项目来说,只是增加了一个 plugs 的配置,其他都不是我们带来的配置项。

我们之所以写的那么详细,从现状,到遇到的问题,到解决思路。其实是有抛砖引玉的目的,比如某些开发者更喜欢 webpack,那么他就可以根据思路实现自己的webpack 构建插件。

还有最后一点,我习惯性的把github 当免费图传,也确实默认需要开发插件的开发者是高阶用户。否则引擎组的同学回复一些PR的连接,是不是也要改成 码云?

无论如何,感谢推荐你自己写的cc-plugin,我有空也会去看看。

我最后的办法,也是合并插件 :rofl:
但是,这只是因为是自己用,如果要提供给外面,还真不知道有什么办法

@weihai.yuan 能不能帮忙回答一下问题,之前一直找不到人,行与不行的有个回复总是好的,现在没人理体验太差

我这边的做法是每个插件注册用于构建操作的消息,
然后构建插件这么写
export const onAfterBuild: BuildHook.onAfterBuild = async function(options: ITaskOptions, result: IBuildResult) {
let tinypngImageCompressPackageInfo = Editor.Package.getPackages({name: “tinypng-image-compress”});
if (tinypngImageCompressPackageInfo.length > 0 && tinypngImageCompressPackageInfo[0].enable) {
let tinypngImageCompressTask = new TinypngImageCompressTask();
await tinypngImageCompressTask.onAfterBuild(options, result);
}
let assetEncryptPackageInfo = Editor.Package.getPackages({name: “asset-encrypt”});
if (assetEncryptPackageInfo.length > 0 && assetEncryptPackageInfo[0].enable) {
let assetEncryptPackageInfo = new AssetEncryptTask();
await assetEncryptPackageInfo.onAfterBuild(options, result, PACKAGE_NAME);
}
}
tinypngImageCompressTask.onAfterBuild 的处理就是向插件请求消息比如
await Editor.Message.request(“tinypng-image-compress”, ‘buildCompress’);

也就是你自己还要 「单独再开发一个插件」 去管理 「不同厂商」 的插件的执行顺序 :joy:

大家看一下楼主的视频,虽然写了很长但是其实就打开终端输入几条命令,我照着弄了一下感觉已经是目前插件系统环境下很好用的了,如果会vue更是如虎添翼

嗯嗯,我写那么详细其实是让大家知道是如何思考与设计的。 很多人根本不试用,就觉得复杂。

是的·只能自己定义执行顺序了

我选择放弃,哈哈 :sweat_smile:

哈哈·只有等待引擎组看什么时候可以配置插件的执行顺序了

我明白你的诉求了,目前确实是不支持指定顺序,不过我后期可以去研究下 vite 的插件机制,因为它有一定的排序规则。

vite 的插件机制比较好做排序是因为在配置文件里 直接就声明好,没有动态加载的情况。

无论如何,我们会研究一下,看下是否有比较好的解决方案。

1赞

终于有篇讲3.x插件开发的,先回复后看


image
请问这个是什么问题

这个包安装了没有npm install一下

image
有的

你改成 require

也是一样的

import XLSX from ‘node-xlsx’; XLSX.parse(filePath)