Skip to content

主要特性

本页介绍 Rolldown 中一些值得关注、但 Rollup 没有内置对应功能的特性。

平台预设

  • 通过 platform 选项配置。
  • 默认值:输出格式为 cjs 时是 'node',其他情况下是 'browser'
  • 可选值:browser | node | neutral

esbuild 的 platform 选项 类似,该选项为模块解析和 process.env.NODE_ENV 的处理方式提供了一组合理的默认值。

与 esbuild 的主要区别:

  • 无论使用什么平台,默认输出格式始终为 esm

TIP

以浏览器为目标平台时,Rolldown 不会为 Node 内置模块提供 polyfill。你可以通过 rolldown-plugin-node-polyfills 选择启用。

内置转换

Rolldown 开箱即用地支持以下由 Oxc 驱动的转换。 转换行为可通过 transform 选项配置。 目前支持:

  • TypeScript
    • 提供 tsconfig 选项时,根据 tsconfig.json 设置配置。
    • 支持旧版装饰器和装饰器元数据。
  • JSX
  • 语法降级
    • 自动转换现代语法,使其兼容你指定的目标环境。
  • 最低 支持降级到 ES2015

CJS 支持

Rolldown 开箱即用地支持混合 ESM / CJS 模块图,无需使用 @rollup/plugin-commonjs。它基本遵循 esbuild 的语义,并且 通过了 esbuild 的全部 ESM / CJS 互操作测试

更多细节请参阅 打包 CJS

模块解析

Rolldown 默认按照 TypeScript 和 Node.js 的行为解析模块,无需使用 @rollup/plugin-node-resolve

提供顶层 tsconfig 选项时,Rolldown 会遵循指定 tsconfig.json 中的 compilerOptions.paths

Define

此功能可用常量表达式替换全局标识符,与 Viteesbuild 中的相应选项保持一致。

@rollup/plugin-replace 的行为不同

请注意,它的行为与 @rollup/plugin-replace 不同。由于替换基于 AST,要替换的值必须是有效的标识符或成员表达式。如果需要文本替换,请使用内置的 replacePlugin

Inject

此功能可使用模块导出的特定值填充全局变量。它等同于 @rollup/plugin-inject,在概念上也与 esbuild 的 inject 选项 相似。

手动代码拆分

Rolldown 允许细粒度控制代码块拆分行为,类似于 webpack 的 optimization.splitChunks 功能。

更多细节请参阅 手动代码拆分

模块类型

  • ⚠️ 实验性功能

这在概念上类似于 esbuild 的 loader 选项:用户可以通过 moduleTypes 选项在全局范围内将文件扩展名关联到内置模块类型,也可以在插件钩子中指定某个模块的类型。更多细节请参阅 模块类型

代码压缩

代码压缩由 Oxc Minifier 驱动。更多细节请参阅其文档。

Was this page helpful?