动态

详情 返回 返回

如何禁止async編譯成generator? - 动态 详情

這是很小的一件事。

但是我花了至少兩個小時的時間。

起因是這樣的:

我需要一個異步函數的原型

const AsyncFunction = Object.getPrototypeOf(async function(){}).constructor

這個原型是用來生成 new AsyncFunction(str)的。

運行環境下,一點問題都沒有。

但是打包出來,總是報錯。

因為new AsyncFunction(str)中有str = ...await...這樣的代碼。

就很奇怪。

sourceMap一點問題都沒有。

各種原因都找遍了。

最後是在受不了,只能查看打包出來的dist文件。

破案了。

async被編譯成generator!!!

找到問題就好解決了。

我直接把const AsyncFunction = Object.getPrototypeOf(async function(){}).constructor放到index.html中,不接受編譯就好。

問題解決了。

但是疑問一直存在,為什麼?

最後,找了一圈,還是ChatGPT告訴我,因為vite.config.ts中的build.target: "es2015"導致的,只要改為build.target: "esnext"就可。

果然,改了之後,async不再變成generator。

原因是es2015不支持async/await。

誒,老項目的配置就是有問題。

新項目的配置就不會有這種坑。

不過,經此,也增加了一些沒用的知識。

也算有所收穫!

Add a new 评论

Some HTML is okay.