vite支持decorator
# 官方态度
因为 vite 是强依赖 esbuild 的,而 esbuild 的最大特性就是速度快,所以也不愿意支持完整的 typescript type checker。
导致 vite 不能和 reflect-metadata 一起使用,比较有名的框架包括 typeorm,nestjs 等都不能很好的结合。
# walkaround
因为 vite 是依赖 esbuild 和 rollup 的,所以可以寻找相应的 esbuild 插件和 rollup 插件。
基本思路就是完全使用 swc/tsc 代替 esbuild。或者使用了装饰器的文件让 swc/tsc 处理,其他文件让 esbuild 来处理,这样速度更快。
# 遗憾
目前的在线 demo 网站,比如 codesandbox 和 stackblitz 基本都支持 vite 了,但是都还不支持 decorator。
# 参考文章
极速 DX: Vite + Electron + esbuild (opens new window) vite 项目支持 typescript 的 emitDecoratorMetadata 和 experimentalDecorators (opens new window) Support emitting typescript decorator metadata (opens new window) decorators not support in js for prebuild (opens new window) Ask for support of decortors in jsx! (opens new window) How do i enable "@babel/plugin-proposal-decorators" with vite (opens new window) vite react 项目中使用装饰器 开启 decorators-legacy (opens new window) Why can't reflect-metadata be used in vite (opens new window) Reconsider about using swc as JS/TS transformer (opens new window)