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 选项

CSS 打包

  • ⚠️ 实验性

Rolldown 默认支持打包从 JS 中导入的 CSS。请注意,此功能目前不支持 CSS Modules 和压缩。

手动代码拆分

Rolldown 允许更细粒度地控制 chunk 划分行为,类似于 webpack 的 optimization.splitChunks 功能。

更多详情请参见 手动代码拆分

模块类型

  • ⚠️ 实验性

这在概念上类似于 esbuild 的 loader 选项,允许用户通过 moduleTypes 选项将文件扩展名全局关联到内置模块类型,或者在插件钩子中指定特定模块的模块类型。更多细节请见 这里

压缩

压缩由 Oxc Minifier 提供支持。更多详情请参见其文档。