
Sanity test-studio 变更日志全解析Sanity Studio 测试工作区的演进路线与源码印证【免费下载链接】sanitySanity Studio – Rapidly configure content workspaces powered by structured content项目地址: https://gitcode.com/GitHub_Trending/sa/sanity导读本文以sanity-test-studio包dev/test-studio/CHANGELOG.md的变更日志为主线系统梳理 Sanity Studio 官方测试工作区从 v3.91.0 到 v5.18.0 的功能演进脉络并结合 dev/test-studio/sanity.config.ts、dev/test-studio/sanity.cli.ts 等仓库源码还原每一项变更背后的配置实现与测试意义。读完本文你将掌握如何从一份变更日志中提炼 Sanity Studio 的核心能力地图并理解 test-studio 在 Sanity 开源仓库中承担的活体测试场角色。一、test-studio 是什么变更日志背后的角色test-studionpm 包名sanity-test-studio见 dev/test-studio/package.json是 Sanity 官方仓库中最重要的内部测试工作区。它不是一个面向终端用户的产品而是一个覆盖几乎所有 Studio 能力面的活文档从 Portable Text 编辑器、验证系统、Structure 工具、Releases 发布体系到 Media Library、增强对象对话框、演示Presentation等都在这里被实际配置、运行并被 e2e 测试 自动化验证。这份 CHANGELOG 遵循 Conventional Commits 约定生成覆盖的版本跨度从 2025-06 的 v3.91.0 一直到 2026-03 的 v5.18.0中间经历了 Sanity 的大版本跃迁v4.0.02025-07-14从 v3 线跨入 v4 线v5.0.02025-12-16v4 → v5 的重大版本官方在此默认启用了 Portable Text 输入的排版行为typographic behaviorsv5.18.02026-03-24当前时间线的最新版本。一个值得注意的细节是日志中大量条目标注为**Note:** Version bump only for package sanity-test-studio。这是因为 test-studio 的package.json是private: true见 dev/test-studio/package.json发布流程会跳过私有包的独立版本号参见 dev/test-studio/get-version.ts 中release bump deliberately skips private packages的注释因此它的版本号始终跟随sanity主包同步跳动仅仅表示依赖被打到了新版本。二、版本演进时间线从 v3.91.0 到 v5.18.0把日志中的版本节点按时间排序可以得到一条清晰的演进主线版本日期关键事件3.91.02025-06-03文档复制duplicate时可映射字段3.99.02025-07-11Media Library 视频集成4.0.02025-07-14进入 v4 大版本线4.7.02025-09-09test-studio 开启高级版本控制Advanced Version Control4.12.02025-10-28嵌套对象对话框beta初版引入4.17.02025-11-20增强对象对话框改为 opt-out文档可最大化4.18.02025-11-21增强对象对话框默认关闭随后 5.3.0 又改为 opt-out 机制5.0.02025-12-16v5 大版本PTE 排版行为默认开启5.8.02026-02-03内置 PTEpasteLink插件默认启用字段组显示验证图标5.17.02026-03-17test-studio 再次切换高级版本控制schema 支持 undefined/null 排序控制从这些节点可以观察到 Sanity 团队典型的功能灰度节奏新能力先进 test-studio 验证 → 按需回滚Reverts→ 调整为 opt-in/opt-out → 最终默认开启。例如增强对象对话框enhanced object dialog在 4.12.0 引入 beta、4.17.0 改为 opt-out、4.18.0 又因故默认关闭见 sanity.config.ts 中对beta等配置的实验态度到 5.3.0 再次确立 opt-out 形态——这正是 test-studio 作为内部试验田的价值。三、按模块深度解读核心变化3.1 Portable TextPTE与 portabletext 生态出现频率最高的词在整份 CHANGELOG 中portabletext、portabletext/editor、portabletext/block-tools等依赖更新出现的次数远超其他任何模块是理解 test-studio 演进的第一关键词。值得关注的实质性变更包括v5.0.0默认启用 Portable Text 输入的排版行为typographic behaviorsv5.8.0内置 PTEpasteLink插件默认启用——粘贴链接体验成为标准能力v5.6.0sanity/schema导出DEFAULT_ANNOTATIONS与DEFAULT_DECORATORS并支持自定义对象类型作为 PTE 注解v4.16.0为 PTE 输入引入可配置的typography插件随后在 4.16.0 的 Bug Fixes 中默认关闭到 5.0.0 再默认开启v4.14.0允许禁用内置的 PTE Markdown 快捷键插件并替换已废弃的MarkdownPluginv3.93.0新增单行one linePortable Text 编辑器选项v5.0.1 / 4.18.0portabletext/editor升级到 v4PTE 输入在卸载unmount时刷新待处理的变更。这些能力的承载实现散落在 test-studio 的 schema 中见 dev/test-studio/schema/standard/portableText 目录下的allTheBellsAndWhistles.ts、customPlugins.tsx、initialFullScreenPTE.ts等文件以及 dev/test-studio/schema/standard/portableText/customMarkers 中对自定义标记、块级操作blockActions的演示。对应地e2e/tests/pte 目录下的InitialFullScreen.spec.ts、FullScreenEscape.spec.ts、referencesInPopover.spec.ts等 Playwright 用例在端到端层面验证了这些 PTE 行为。3.2 验证系统Validation的上下文能力持续扩张从 v4.14.0 到 v5.14.0验证 API 的上下文context不断获得新成员v4.14.0currentUser进入验证上下文v5.9.0hidden加入验证上下文v5.8.0path加入ConditionalPropertyCallbackContextv5.8.0为字段组groups显示验证图标v5.14.0修复嵌套字段的组验证渲染并修复hidden 字段在验证中显示错误值的问题v5.17.0schema 层支持控制 undefined/null 的排序行为。test-studio 中对应的验证演示 schema 覆盖了丰富的场景例如 dev/test-studio/schema/debug/longValidation.ts、dev/test-studio/schema/debug/dateValidation.ts、dev/test-studio/schema/debug/dateTimeValidation.ts以及 dev/test-studio/schema/ci/validationCI.js 这一组专门供 CI 回归使用的验证用例e2e/tests/validation-test/validation.spec.ts 则在浏览器端对验证表现做断言。3.3 Structure默认窗格、文档最大化与焦点模式Structure 工具sanity/structure是文档浏览体验的核心日志中相关的演进包括v5.9.0为文档增加defaultPanes选项——可以指定打开文档时默认显示的窗格组合v4.22.0支持在焦点模式focus mode下链接到文档v4.17.0新增最大化文档能力随后在 4.16.0 修复中短暂回滚最终保留。test-studio 在 dev/test-studio/structure/resolveStructureDocumentNode.ts 中直接使用了这些 APImanyViews类型通过.defaultPanes([editor, json-10])指定默认窗格并为book类型挂载自定义的 Variants 视图、为author类型挂载 JSON 预览视图。结构树本身由 dev/test-studio/structure/resolveStructure.ts 与 dev/test-studio/structure/groupByOption.ts 构建对应 e2e 用例可见 e2e/tests/desk 下的defaultPanes.spec.ts、documentList.spec.ts等。3.4 Releases 与高级版本控制从 feature flag 到默认开启v4.7.0test-studio 首次开启高级版本控制Advanced Version Controlcommit 80cddcav5.17.0再次切换开启commit 042b8eev4.14.0新增scheduledDrafts配置项默认开启v4.7.0核心支持自定义 release 动作custom release actions。在配置侧dev/test-studio/sanity.config.ts 的sharedSettings插件中advancedVersionControl: {enabled: true}与 workspace 级releases配置共同构成发布能力矩阵。源码实现示例见 dev/test-studio/releases/customReleaseActions.tsx它通过sanityClient.releases.archive({releaseId})与releases.delete({releaseId})组合出一个Archive and Delete自定义动作并在删除后利用useRouter()导航回 release 工具根目录——这正是日志中自定义 release 动作能力的完整落地。相关 e2e 覆盖见 e2e/tests/releases 下的customActions、displayDocument、revert、unarchive子目录。3.5 增强对象对话框Enhanced Object Dialog功能灰度的典型案例v4.12.0新增嵌套对象对话框nested object dialog的配置 flagbeta并引入初版嵌套对象导航对话框面包屑导航v4.15.0 / 4.16.0 / 4.21.0持续修复自定义组件、数组 item、引用输入等在对话框中的行为v4.17.0 / 5.3.0确立 opt-out 机制。e2e/tests/enhanced-object-dialog 下的breadcrumbNavigation.spec.ts、deepLinkPath.spec.ts、componentItemSmoke.spec.ts等测试完整覆盖了这一功能的导航与深链行为是阅读日志时追踪该功能成熟度的最佳索引。3.6 Media Library从内部配置到视频集成v3.99.0Media Library 视频集成v4.2.0媒体库字段支持 GROQ 过滤器v4.20.0defineVideoField支持分组groups与字段集fieldsetv5.8.0新增媒体库内部配置media library internal config。在 dev/test-studio/sanity.config.ts 中可以看到媒体库配置的完整形态workspace 级mediaLibrary: {enabled: true}以及media-library-playground-localdev工作区中的__internal: {frontendHost: http://localhost:3002}本地联调配置dev/test-studio/sanity.config.ts。专门用于该主题的独立测试工作区是 dev/media-library-aspects-studio其中aspects/colourDetails.ts与aspects/productDetails.ts展示了媒体元数据方面aspects的扩展模式。3.7 其余值得留意的演进点日期时间时区v3.92.0 为 datetime 输入加入时区设置v4.16.0 修复了手动改时间时按电脑时区错误换算的问题v5.6.0 允许为日期数组设置时区并在allowTimeZoneSwitch为 true 时显示时区按钮数组arraysv5.13.0 在达到验证上限后禁用继续添加元素v4.22.0 修复数组中间对象删除后恢复revert的问题v3.93.0 保证虚拟化数组项在滚动前渲染引用referencesv4.16.0 向自定义引用过滤器传递 perspective 栈v5.11.0 支持条件化多 schema 引用v5.14.0 修复对话框中跨数据集引用输入导致对话框关闭的问题文档动作document actionsv4.17.0 修复文档动作被渲染 3 次的问题并提示onComplete有害、应使用本地状态。test-studio 在 dev/test-studio/documentActions 中定义了DebugAction、TestConfirmDialogAction、TestCustomComponentAction、createCustomPublishAction等一系列自定义动作供动作 API 回归演示Presentationv5.13.0 为DocumentLocation增加icon与showHref属性test-studio 在 dev/test-studio/schema/debug/locationResolverTest.ts 与sanity.config.ts的presentationTool配置中直接验证dev/test-studio/sanity.config.ts。四、源码印证test-studio 是如何跑起来的4.1 多工作区配置一张配置验证二十种场景dev/test-studio/sanity.config.ts 通过defineConfig([...])导出了二十余个工作区WorkspaceOptions 数组每个工作区都是对一个真实用户场景的模拟defaultbasePath/test主工作区项目ppsg7ml5、数据集test开启 scheduledPublishing、tasks、mediaLibrary 与高级版本控制default-hidden/always-hidden/admin-only验证hidden静态隐藏与基于currentUser.roles的动态隐藏管理员才可见nonexistent-project/nonexistent-dataset故意指向不存在的项目/数据集验证 Studio 的错误降级路径unsplashassetSources: () [unsplashAssetSource]且directUploads: false验证仅允许 Unsplash 上传的文档场景secondary/staging/growth跨项目、跨环境生产 API 与api.sanity.work暂存 API的配置custom-components挂载studioComponentsPlugin()与formComponentsPlugin()全量替换 layout、logo、navbar、toolMenu 及 input、field、item、preview、block、annotation 等表单组件stega以StegaDebugger作为 input 组件配合 docs/STEGA.md 调试字符串嵌入stega行为partialIndexing/playground分别验证search.unstable_partialIndexing与search.strategy: groqLegacypresentation-preview-kit/presentation-next-sanity模拟与 preview-kit、next-sanity 集成的真实演示站点。工作区与数据集通过basePath区分这也解释了为什么 e2e/playwright.config.ts 中 Chromium 项目的baseURL是${BASE_URL}/chromium——每个浏览器项目对应一个独立的工作区路径测试通过 URL 片段直接进入目标工作区。4.2 CLI 与构建React Compiler、Vite DevTools 与 monorepo 热更新dev/test-studio/sanity.cli.ts 展示了 test-studio 承担的另一类职责——验证 Sanity CLI 的现代构建链unstable_bundledDev: true启用 Vite 实验性全量打包模式避免 monorepo 懒加载导致的瀑布式重载reactCompiler通过oxc-transform-reacttransform: oxc运行 React Compiler目标 React 19并通过sources过滤只编译工作室自身源码vite()钩子按环境变量条件注入vanillaExtractPlugin、Vite DevToolsENABLE_VITE_DEVTOOLS、React DevToolsENABLE_REACT_DEVTOOLS、生产 profilingREACT_PRODUCTION_PROFILING以及 monorepo 解析条件。构建任务由 dev/test-studio/turbo.json 定义build输出.sanity/**与dist/**start依赖build且不可缓存。部署到 Vercel 时dev/test-studio/vercel.json 将所有路由回退到index.html以支持 SPA 路由。4.3 版本号注入让部署的 Studio 可追溯dev/test-studio/get-version.ts 读取sanity/package.json的版本并结合 Vercel 环境变量生成语义化预发布版本PR 构建产出1.2.3-pr.123abc1234分支构建产出1.2.3-git.feature-xabc1234。日志中 v4.12.0 提到的为部署的 test-studios 增加更详细的版本信息正对应这套机制——它让线上测试工作区的版本可以精确回溯到提交哈希。4.4 与 e2e 测试体系的闭环test-studio 的每一次功能开关都会反映到 e2e 测试套件中e2e/globalSetup.ts 会先访问 baseURL 等待/users/me接口响应以确保初始 bundle 就绪e2e/studio-test.ts 提供了createDraftDocumentfixture导航到path;documentId并等待表单可编辑、sanityClientfixture直连api.sanity.work清理测试数据与失败诊断上报。日志中几乎每一条功能变更都能在 e2e/tests 找到对应 spec——这是 Sanity 工程实践的核心闭环CHANGELOG 记录变更test-studio 承载变更e2e 守护变更。五、如何高效阅读这份 CHANGELOG按模块过滤日志中的条目前缀**core:**、**structure:**、**schema:**、**deps:**、**form:**是天然的模块索引。例如想追踪 PTE 演进只读portabletext、portabletext/*与core前缀即可区分 Feature 与 FixFeatures 代表新能力可进一步到 dev/test-studio/schema 找演示类型Bug Fixes 则是行为修正可到对应 e2e spec 看回归用例留意 Reverts 与 NoteReverts揭示被回滚的实验如增强对象对话框、文档最大化Note: Version bump only表示该版本没有针对 test-studio 本身的改动版本跨度对比v4.0.0 与 v5.0.0 之间是观察 Sanity 大版本策略的最佳窗口——v5 的核心叙事是 PTE 排版行为默认化而 v4 的叙事则是 Release 体系与媒体库的成熟。结语一份 CHANGELOG 表面上是流水账但结合 test-studio 的配置源码dev/test-studio/sanity.config.ts、构建脚本dev/test-studio/sanity.cli.ts与端到端测试e2e它立刻变成一张 Sanity Studio 的能力地图和工程实践路线图。对于希望深入 Sanity Studio 源码、学习大型开源项目测试基建或者评估某个新特性是否稳定的开发者来说sanity-test-studio的这份日志都是最直接的起点。【免费下载链接】sanitySanity Studio – Rapidly configure content workspaces powered by structured content项目地址: https://gitcode.com/GitHub_Trending/sa/sanity创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考