Rolldown 1.3.0:import attributes 进实验选项,Vite 用户先不要强制覆盖
项目地址:
Release:
Vite 8 公告:
Vite 用户:不要用 overrides / resolutions 强制覆盖
官方在 release notes 里单独点名:不要通过 overrides 或 resolutions 把 rolldown 1.3.0 强制安装进 Vite。Vite 8.3.6 及更早版本需要改动才能与 1.3.0 配合工作。Vite 自己锁定 rolldown 版本,正常安装走的是自带的版本,不受影响。正确做法是等支持 Rolldown 1.3 的 Vite 版本发布,再随 Vite 升级。
这也决定了升级顺序:先升级 Vite 到支持 Rolldown 1.3 的版本,再让 rolldown 跟着升级;不要反过来先在依赖里指定 rolldown 1.3.0,因为那样会触发上面提到的版本不匹配问题。
实验性支持 import attributes
即 import 语句里的 with { ... } 部分:
import config from './config.json' with { type: 'json' };
import shader from './shader.glsl' with { type: 'text' };
import wasm from './module.wasm' with { type: 'bytes' };
开启方式:
export default { experimental: { importAttributes: true } }
打开 experimental.importAttributes 后:
- 同一文件以不同属性导入时,被视为不同模块;
type: 'json'、type: 'text'、type: 'bytes'无需插件即可工作;- 插件可在
resolveId、load、transform中读取属性,并可在resolveId中修改属性。
该设计遵循 Rollup 5。默认关闭,原因是它会改变带属性导入模块的 id,把 id 当文件路径使用的插件可能因此失效。Rolldown 的 dev 模式与 Vite 目前都还不支持这个特性。
devtools 构建报告
devtools: { mode: 'report' } 会把每次构建的简短 Markdown 与 JSON 写入 node_modules/.rolldown/report/。报告涵盖:
- Time:扫描与生成耗时、各 hook 的插件耗时、没有执行任何工作的 hook、transform hook 中最慢的模块;
- Chunks:最大的 chunk、每个 chunk 存在的原因、出现在多个 chunk 中的模块;
- Modules;
- Packages:最大的包、直接依赖与传递依赖、存在多个版本的包;
- Graph:各入口的初始加载、chunk 导入图、模块保留体积;
- Changes:与上次构建或固定基线的差异;
- Raw data:
metrics.json稳定指标 id、module-graph.json、chunk-graph.json。
@rolldown/perf-kit
新包 @rolldown/perf-kit 消费 devtools report 数据,并加入自身测量:
npx @rolldown/perf-kit help
测量三类目标:
- 页面:限速浏览器中的 LCP/FCP,构建需带 sourcemap;
- Node.js 或 Deno 服务端:服务就绪耗时;
- Cloudflare Worker:全局作用域耗时。
破坏性变更
1. preserveModules 文件名改为遵循 Rollup(#11410、#11413)
[name] 现在保留非 JS 扩展名:data.json 会变成 data.json.js 而不是 data.js,Comp.vue 会变成 Comp.vue.js 而不是 Comp.js。把 exports 指向旧文件名的库需要相应更新。
2. CLI:--input 不能与位置参数入口同时使用(#11445)
# 1.3.0 起报错
rolldown 1.js --input 2.js
# 改为
rolldown 1.js 2.js
rolldown --input 1.js --input 2.js
修复:外部导入保留属性
#11302、#11303 修复了外部导入的属性保留问题,无论是否开启 experimental.importAttributes 都生效。此前,同一外部模块带不同属性的两次导入会被合并成一个模块,导致其中一次导入的属性丢失;旧的 assert 关键字也会被复制到输出中,而 Node.js 22+ 无法加载这种写法。
输入:
import 'ext';
import 'ext' with { type: 'json' };
import data from 'ext2' assert { type: 'json' };
1.2.16 输出:
import 'ext' with { type: 'json' };
import data from 'ext2' assert { type: 'json' };
1.3.0 输出,并附带 DEPRECATED_IMPORT_ASSERTION 警告:
import 'ext';
import 'ext' with { type: 'json' };
import data from 'ext2' with { type: 'json' };
插件现在可以在 this.getModuleIds() 中看到这类外部模块的 id 携带属性,例如 ext?attributes=%7B%22type%22%3A%22json%22%7D。
版本与迁移背景
- Vite 8.0(2026-03-12):用 Rolldown 统一替代开发环境的 esbuild 与生产环境的 Rollup,官方称比 Rollup 快 10-30 倍,插件 API 兼容。迁移建议先在 Vite 7 上切到
rolldown-vite,再升 Vite 8。 - Vite 8.3.7(2026-11-09):更新 Rolldown 到 1.2.18。
- Vite 8.3.8(2026-11-11):修复 transform hook meta 与 inline worker 资源。
对照上面这些版本号可以看出,Vite 8.3.x 仍停在 1.2.x;1.3.0 的适配要等后续 Vite 版本,升级顺序仍然是先 Vite、后 rolldown。