Pinia 4.0 发布:ESM only、@vue/devtools-api v8 与错误诊断重构
Pinia 4.0.0 于 2026-07-14 发布,之后跟进 4.0.1、4.0.2 两个补丁版本;配套包同步发布:@pinia/testing@2.0.0、@pinia/nuxt@1.0.0,4.0.2 对应 @pinia/testing@2.0.1。
这一版只包含技术层面的破坏性变更:ESM only,以及升级 @vue/devtools-api——它现在必须和 pinia 一起安装。另外对错误与开发警告做了一次大重构,改用 Nostics,让检测到的问题更容易修,无论对人还是对 agent。
- 仓库:https://github.com/vuejs/pinia
- v4.0.0 release:https://github.com/vuejs/pinia/releases/tag/v4.0.0
- 变更对比 v3.0.4...v4.0.2:https://github.com/vuejs/pinia/compare/v3.0.4...v4.0.2
Features
- 升级 devtools-api 到 v8(@posva,25572)
- 使用 nostics 改善错误信息(@posva,f3522)
- 在
storeToRefs中优雅跳过 nullish 值(@JSap0914,@posva,#3134) - 对
storeToRefs的非法属性做诊断(@posva,e7313) - 对插件中的错误值做诊断(@posva,29835)
- 导出
piniaSymbol(@cexoso,#2973)
Bug Fixes(部分)
- 使用现代的
Object.hasOwn - 在
shouldHydrate中对非 plain object 尊重skipHydrate标记(#3126) - 修复同一 callback 被订阅两次(@JSap0914,#3144)
- ci: 固定 pnpm 到 10.7.0 以匹配 action-setup bootstrap
- devtools: 让 settable getters 正常工作
破坏性变更与构建提交
build: esm only(Eduardo San Martin Morote, 2026-02-02)
BREAKING CHANGE: 移除对 CJS 的支持(issues/3099)
build: drop CJS support, up minimal TS version(2026-02-02)
refactor: mark as type: module
release: pinia@4.0.0 @pinia/testing@2.0.0 @pinia/nuxt@1.0.0(2026-07-14)
release: pinia@4.0.1
release: pinia@4.0.2 @pinia/testing@2.0.1
一句话概括:包改成纯 ESM,不再产出 CJS 入口;最低 TypeScript 版本要求被提高。
变更文件
- 删除:
packages/pinia/api-extractor.json - 删除:
packages/pinia/index.cjs - 修改:
packages/pinia/package.json - 新增:
packages/pinia/src/diagnostics.ts - 新增:
packages/pinia/tsdown.config.ts(替换原tsup.config.ts)
版本支持状态
| 版本 | 支持 |
|---|---|
| 4.0.x | ✅ |
| 3.0.x | ✅ |
| 2.2.x | ❌ LTS(issues/3099) |
| <2.2.0 | ❌ |
升级检查清单
CJS 引用改 ESM:
index.cjs已删除,require('pinia')一类的引用需要改为 ESMimport,构建工具链也要能产出/消费 ESM。补装 devtools-api:devtools-api 升到 v8 后不再是隐式依赖,需要与 pinia 一起安装。
npm i pinia @vue/devtools-api检查 TypeScript 版本:最低 TS 版本已被提高,低于要求的版本需要先升级 TS。
确认
package.json的模块类型:包已标记type: module,混用 CJS 配置的项目需要一并调整。