Skip to main content
Bun 将其内部转译器暴露为 Bun.Transpiler 类。要创建实例:

.transformSync()

使用 .transformSync() 方法同步转译代码。模块不会被解析,代码也不会被执行。结果是纯 JavaScript 代码的字符串。
要覆盖在 new Bun.Transpiler() 构造函数中指定的默认 loader,请向 .transformSync() 传递第二个参数。
.transformSync 在与调用代码相同的线程中运行转译器。与转译器在同一个线程中运行,但与应用程序的其余部分在单独的事件循环中运行。宏和常规代码共享全局变量,因此它们之间共享状态是可能(但不推荐)的。在宏之外使用 AST 节点是未定义行为。

.transform()

transform() 方法是 .transformSync() 的异步版本,返回一个 Promise<string>
除非您要转译许多大文件,否则请使用 Bun.Transpiler.transformSync。线程池的开销通常比转译本身还要大。
.transform() 方法在 Bun 的 worker 线程池中运行转译器,因此运行 100 次会在 Math.floor($cpu_count * 0.8) 个线程之间分配工作,而不会阻塞主 JavaScript 线程。如果您的代码使用了宏,它可能会在该新线程中生成一个新的 Bun JavaScript 运行时环境副本。

.scan()

.scan() 方法扫描源代码并返回其导入和导出的列表,以及每个的元数据。类型专用的导入和导出会被忽略。
imports 数组中的每个导入都有一个 pathkind。Bun 将导入分为以下类型:
  • import-statementimport React from 'react'
  • require-callconst val = require('./cjs.js')
  • require-resolverequire.resolve('./cjs.js')
  • dynamic-importimport('./loader')
  • import-rule@import 'foo.css'
  • url-tokenurl('./foo.png')

.scanImports()

在对性能敏感的代码中,使用 .scanImports() 方法获取导入列表。它比 .scan() 更快(特别是对于大文件),但由于性能优化,精度略有降低。

参考

查看 TypeScript 定义 可展开