293 - 《一个有成本的 Promise 知识点》
发布于 2023年4月20日
这个知识点的成本是一位同事几小时的时间和内部框架的一次回滚,记录下,怕忘。背景是今天(2023.04.20)内部框架发布之后,遇到打包后某些文件没有产出的问题,然后就回滚了。
经排查,问题是这样。
1、Umi 框架的插件可以利用 api.onBuildComplete
在构建完成后做一些事,同时支持异步执行。比如这样,build 结束后就会分别打印 1 和 2。
api.onBuildComplete(async () => { console.log(1); });
api.onBuildComplete(async () => { console.log(2); });
2、但是有个插件这样写。
api.onBuildComplete(async () => { return new Promise(() => {}) });
api.onBuildComplete(async () => { console.log(2); });
就出问题了,问题是 console.log(2)
没有执行,所以 2 被打印。这是个比喻,实际情况是在构建完成后会生成一些额外的文件,所以问题是这些文件也没有生成。同时,更严重的是,这个问题没有报错退出,所以流程上会以为他成功了,然后直接完成部署。