更简单的运行时转译esm、ts文件工具:jiti
虽然@swc/register挺好用的,但是安装依赖时还要下载一个十几MB的swc编译器,我觉得挺大的,网速慢的情况下可能要花费挺长时间。
在浏览开源项目的时候发现了一个工具叫jiti,查了一下发现npm下载量远超@swc/register,而且被很多出名项目使用,比如unbuild工具的stub模式就使用了jiti来运行时转译js、ts。
而且最重要的是这个项目是完全js写的,基本上只用到babel来进行转译,安装的时候自然就快很多了。
用到jiti的项目:
- Docusaurus
- FormKit
- Histoire
- Knip
- Nitro
- Nuxt
- PostCSS loader
- Rsbuild
- Size Limit
- Slidev
- Tailwindcss
- Tokenami
- UnoCSS
- WXT
- Winglang
- Graphql code generator
- Lingui
- Scaffdog
- …UnJS ecosystem
- …58M+ npm monthly downloads
- …5.5M+ public repositories
jiti用法
用法肯定是直接看jiti官方文档了,也就是项目的readme文档:https://github.com/unjs/jiti
如果在cjs模式的node项目里面,想直接引入esm模块:
1 | // 在ESM文件导入并使用 |
创建完一个jiti之后就可以去引入各种模式的js、ts文件了:
1 | // jiti.import() 可以像 import() 一样引入模块 |
使用演示
上一篇文字我们使用了taro进行展示,这次咱们就拿uniapp来演示一下吧:
这是我fork修改的一个uniapp模板,基于uni-cli创建的项目:https://github.com/MatrixCross/Vue3-Uniapp-Starter/blob/main/vite.config.ts
我们的vite.config.ts虽然会被uni-cli编译成cjs模块去运行,但是我们在在里面引入的unocss包是不带cjs的,所以直接import unocss from 'unocss/vite'
是会报错的。我们这时候就需要使用转译工具将esm转cjs。
方法如下:
1 | import createJITI from 'jiti' |
现在这样就能成功用上unocss辣!
直接运行ts文件
和@swc/register、tsx、ts-node等项目一样,jiti也提供了cli去直接运行ts:
1 | npx jiti ./index.ts |