这是很小的一件事。
但是我花了至少两个小时的时间。
起因是这样的:
我需要一个异步函数的原型
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。
诶,老项目的配置就是有问题。
新项目的配置就不会有这种坑。
不过,经此,也增加了一些没用的知识。
也算有所收获!
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。