大家好,我在项目里面的 packages 放置了两个插件,一个是用于热升级,另一个用于删除 AnySDK,两个插件在 editor:build-finished 消息后都会修改 main.js 文件,好像这个版本的 creator 会并行运行插件,所以导致 main.js 文件的修改因为没有锁保护出错了,请问我该怎么避免这个问题?
你好,接受到 editor:build-finished 以后,你的消息处理并不是并发。而是一个一个执行。但是执行的顺序并不能给你保证。通常是按照谁先注册谁先执行的原则。
你的情况很有可能是,消息内的处理函数是一个异步函数导致的。
的确是这样,应该是 fs.writeFile 异步导致的
恩,那我们可以考虑以下几种解决方法:
- fs.writeFile 改为 fs.writeFileSync 做一个同步操作。
- 将写操作统一提交给一个总的控制中心,由他负责总的调度安排
- 避免两个插件在同一事件中对同一文件进行同时写操作这件事情。
我觉得这个事情并不能通过 Creator 来帮你解决。毕竟如果两个插件都是你本人开发可能这个顺序是可以控制的,但是如果是由不同的团队开发,写冲突是很难避免的。
好的,谢谢,考虑先使用 writeFileSync 来做