Skip to main content
Bun 将其内部转译器作为 Bun.Transpiler 类公开。创建实例:

.transformSync()

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

.transform()

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

.scan()

.scan() 方法扫描源代码,并返回其导入和导出的列表,以及每一项对应的元数据。仅类型的导入和导出会被忽略。
imports 数组中的每个导入项都包含 path 和 kind。Bun 将导入分类为以下几种类型:
  • import-statement:import React from 'react'
  • require-call:const val = require('./cjs.js')
  • require-resolve:require.resolve('./cjs.js')
  • dynamic-import:import('./loader')
  • import-rule:@import 'foo.css'
  • url-token:url('./foo.png')

.scanImports()

在对性能敏感的代码中,使用 .scanImports() 方法获取导入列表。它比 .scan() 更快(尤其是对于大型文件),但由于性能优化,其准确性略低。

参考

查看可展开的 TypeScript 定义