這是很小的一件事。
但是我花了至少兩個小時的時間。
起因是這樣的:
我需要一個異步函數的原型
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。
誒,老項目的配置就是有問題。
新項目的配置就不會有這種坑。
不過,經此,也增加了一些沒用的知識。
也算有所收穫!