@anyday/sanity-workspace-manager

中文文档
0.8.0发布于 2026/11/09UNLICENSEDES Module近 30 天下载 1728

生成并检查一个网站 Repo 的工作空间管理器

中文使用文档
文档目录14 节
  1. 所需资源
  2. 快开始
  3. 两个文件
  4. 生成
  5. 内容
  6. 无法进入现场项目
  7. 启动页面
  8. 从手制的货单上移走
  9. 检查
  10. 注册
  11. 签名于
  12. 解决问题
  13. 如何融为一体
  14. 发展和出版

@ 随时/ 卫生- 工作空间管理器

Anyday's Sanity工作空间管理器的命令行工具. 工作空间管理器创建新 网站的 Sanity 工作空间在几下: 项目、 其数据集、 启动器或复制内容, 该品牌,中央工作室条目和Vercel网站. 它没有任何一个项目的代码. 每种地点(a) 项目类型)的描述方式是: workspace-manager.json 显示 住在那个网站的回放.

这个工具能保存和保存 显示的方式 sanity typegen generate 创建类型 :

  • generate 写入 workspace-manager.json 从repo的策略, 活的Sanity项目 财务报告和审定财务报表 workspace-manager.config.json,它持有你的答案。 改变计划 再来一次.
  • check 当清单已过时或已手工编辑时失败.
  • register 保存工作空间管理器的运算表,然后在 工作空间应用.

所需资源

  • 节点.js 20或后.
  • 一个 Sanity 登录 generate 财务报告和审定财务报表 register: 运行 npx sanity login 一次,或设定 SANITY_AUTH_TOKEN。 。 。 . check 没有.
  • 对于 register,则 署长 扮演着"圣洁组织"的角色.

快开始

从站点根接回:

# 1. Export the Studio's schema (writes sanity.schema.json)
cd studio && npx sanity schema extract && cd ..

# 2. Answer a few questions and pick starter pages; writes the config and the manifest
npx @anyday/sanity-workspace-manager generate

# 3. Review workspace-manager.config.json, commit both files next to the schema

# 4. Save it to the workspace manager
npx @anyday/sanity-workspace-manager register --api https://anyday-workspace-manager-sanity-api.vercel.app

计划改变后:提取计划,运行 generate,承诺, register。 。 。 .

两个文件

文件持有编辑者
workspace-manager.config.json您的答案: ID, 复制部分, 颜色角色描述, 启动页, ...你个
workspace-manager.json其他一切: 字段映射、主题默认、启动页面内容generate

永不编辑 workspace-manager.json页:1 $generated 线有散列,和 check 失败 手进行编辑。 更改配置并运行 generate 换句话说 配置有一个JSON Schema,所以你 编辑器安装后完成并检查.

将此行添加到站点 repo 中 .gitattributes,所以GitHub标记显示为生成 在公关中崩溃; generate 提醒你,直到它在那里:

workspace-manager.json linguist-generated=true
配置字段持有
id永久: 工作存储它, 它前置每个站点的 Vercel 项目
title工作空间应用中显示的名称
organizationId建立新工作空间
vercelTeamId客户自己的Vercel团队; 留待任何一天
siteGitHub 重播和分支 每一个新站点从
studioOrigins打开新工作空间的演播室 包括一个网站 /studio; 从首跑的现场项目中选取
sections每一内容类型,其标签为Copy picker,或 false 别管了
colorRoles每个主题颜色都有一个简短的描述 它的用地, 向谁设置一个品牌
themeFiles有上传文件(fonts)的主题字段可以复制到新站点;字体往往每个品牌都许可使用
starter什麽 开始新鲜 写: 选中的活页, 或 [] 一个空主页(见下文)
shared对于一个网站共享一个项目的客户: projectId, (中文(简体) ), siteIdField, (中文(简体) ), slugPrefix,则 sampleSiteId 其主题和页面生成为
siteEnvEnv var 将网站命名为 .env.example 不叫他们名字, siteId 为共享类型, fixed 模板值,以及 linkShared 要链接的团队共享变量
site.rootDirectory, (中文(简体) ), site.vercelProjectName站点在repo中的文件夹,以及它的Vercel项目名的模板(例如. {{siteId}}(中文(简体) )
.singletons, (中文(简体) ), homePage, (中文(简体) ), settingsFields:从第一次运行时的计画中猜出,询问何时断裂

生成

npx @anyday/sanity-workspace-manager generate [dir] [options]

dir 是站点Repo,默认为当前文件夹。 第一次运行询问项目类型 然后列出现场的页面选择 首页从. 答入于相会. 以后再用,只问有什么变化 在计划:

generalSettings.logo is gone. Which field is the logo? [brandLogo/favicon/none] (none):
Copy section mediaMention is gone from the schema. Was it renamed? [pressMention/no] (no):
New content type event: offer it as a copy section? [y/n] (y):

一个重命名的字段读作一个去除,一个又加,所以 generate 问而不是猜测.

选项对
--yes不用问就拿建议的答复,列出答案
--offline没有读取活的工程: 将活的值保留在显示中
--diff显示两个文件的更改, 并写入任何内容
--ask-again再次询问已保存的问题, 例如更改复制部分或选择起始页
--project <id>Sanity计划的新工作空间复制他们的计划
--org <id>建立新工作空间
--vercel-team <id>客户自己负责现场的Vercel团队
--studio <origin>打开新工作空间的工作室,例如:. https://acme.sanity.studio
--dataset <name>数据集活值的读取来源( 默认) production(中文(简体) )
--starter <pages>没有列表的启动页面 : home,弹出或编号,逗号分隔

内容

来源用于
git 远程和默认分支site,建议编号和名称
.env.example名称siteEnv,每个新站点需要的变量(*_WORKSPACES_API_URL 如果网站有一个)
sanity.schema.json复制段落、单调、主页、语言文档、设置字段、颜色和字体
现场项目组织、 Studios 和 CORS 源代码从中选择、主题颜色和默认,字体命名于 themeFiles开始页面

sanity.schema.json 被寻找在 repo 根, frontend, (中文(简体) ), web, (中文(简体) ), site, (中文(简体) ), studio, (中文(简体) ), apps 中每个文件夹 apps。 。 。 .

无法进入现场项目

generate 首先说为什么它不能读到现场项目

情况印着什么修补
未签名Not signed in to Sanity: run npx sanity login to read live values运行 npx sanity login
过期或坏会Your Sanity session is missing or expired: run npx sanity login …运行 npx sanity login; 如果 SANITY_AUTH_TOKEN 已经设置, 它会胜过登录, 所以修复或取消它
无访问Your Sanity account can't read project <id>: ask one of its Administrators …请该项目的管理员添加您( Viewer 足够)
还有什么Couldn't read the live project <id>: <reason>遵循原因,例如错误 --project 或者说 --dataset

然后,它提出仅从计划继续。 只有现场项目的值(颜色, 字体,起步页)与已存在的出行表相隔开来,而后一行则如此. 在第一个 运行它们开始为占位符:黑色颜色、系统字体和一个空主页,以及 register 在救他们之前先问 签名并运行 generate 再次读取活值.

启动页面

启动页面是新工作空间在不复制另一个工作空间时的开始. 他们 总是来自现场,所以你更新 在工作室,从来没有手在文件。 这个 首先列出主页语言的活页

Pages of the live site:
  1. Home (/home)  ← home
  2. About us (/about-us)
  3. Contact (/contact)
Starter pages, by number (e.g. 1,3; Enter for one empty home page):

配置只保存您的选择, 例如 . "starter": ["home", "about-us"],每跑读这些 又页. home 表示设置标记为主页的任意一页; 其他的都是 a 弹片或文档 id . [] 表示一个空主页.

稍后更改启动页面运行 generate --ask-again 从列表中再次选择,或 编辑配置 starter 运行 generate。 。 。 .

一个新的工作空间只有它的启动页面,所以 generate 删除每个链接到另一个文档(a) 医生卡,另一页的按钮),并列出它去掉的东西. 计划已经没有了 也掉下来了 启动页面获得 {{siteName}} 财务报告和审定财务报表 {{language}} 其中源网站的名称 语言是.

从手制的货单上移走

运行 generate 在有 workspace-manager.json 并且没有配置 : 它会移动每个选择 包含复制部分的标签、颜色描述和字体,输入配置. 然后列出现场网页,从中选择起始页;直到你选择,它保留了清单 已有启动页面.

检查

npx @anyday/sanity-workspace-manager check [dir]

唯相读取. 失败, 指定每个差异, 当:

  • 方案以某种方式改变了表列用途(一个重新命名或去除的字段,一个新的内容类型),
  • workspace-manager.json 经手编辑,或
  • 启动页面有已不存在的字段.

只更改字段 显示用途 物质:标志、站点名称、主题颜色和字体, 主页,语言字段,内容类型,以及启动页面上的字段. check 只读 repo,所以可以在CI中运行而无需签名.

注册

npx @anyday/sanity-workspace-manager register [dir] --api <url>

检查 workspace-manager.json 内 dir (默认: 当前文件夹)并保存到 工作空间管理器。 API现场直播是 https://anyday-workspace-manager-sanity-api.vercel.app; 设置 WORKSPACE_MANAGER_API_URL 跳过 --api。 。 。 .

  • 你一定是个 署长 名单 organizationId。 。 。 .
  • 重新注册替换保存的复制件 id,所以更改的表单不需要删除 先说.
  • 它在保存占位符颜色或字体之前询问; --yes 跳过问题.
  • --dry-run 检查清单而不保存它.
  • 它警告说,当名单上的名字是 Vercel 团队,API还没有标志。 客户自己的团队 在 API 上需要其符号 VERCEL_TOKEN_<team id> (一个秘密,在凡尔塞尔上增加 由任何一天).

签名于

所有命令都使用 SANITY_AUTH_TOKEN 当它被设定的时候 npx sanity login 已保存 。 使用您自己的登录: 工作空间管理器拒绝 robot sords register,这样 每个项目类型都会追溯到一个人身上 如果在您的外壳中导出一个机器人令牌( 用于 以工作室部署为例, unset SANITY_AUTH_TOKEN 登记前.

解决问题

消息修补
No sanity.schema.json运行 npx sanity schema extract 在工作室文件夹中
workspace-manager.json is out of date运行 generate 并输入两个文件
was edited by hand将更改放入配置, 然后运行 generate
No page with the slug or id "…"修复配置 starter,或运行 generate --ask-again 重新选择
No GitHub remote found添加一个 origin 远程或设置 site.repo 在配置中
Not signed in to Sanity运行 npx sanity login
Your Sanity session is missing or expired运行 npx sanity login,或固定或未设定 SANITY_AUTH_TOKEN
Your Sanity account can't read project …请该项目的管理员添加您( Viewer 足够)
Couldn't read the live project …遵循原因,例如错误 --project 或者说 --dataset
Pass --api <url> or set WORKSPACE_MANAGER_API_URL添加 --api https://anyday-workspace-manager-sanity-api.vercel.app
Use your own Sanity login, not a robot tokenunset SANITY_AUTH_TOKEN 和使用情况 npx sanity login
Register only as an Administrator of organisation …请该组织的主管管理 register

如何融为一体

整个设计,包括每个显示的领域,在 文件/项目配置, (中文(简体) ), 和如何生成工作在 文献/显性遗传学 (每天只有GitHub组织).

发展和出版

从工作空间管理器的克隆 repo 中运行 CLI 不包含 npm : npm run cli -- generate ../my-site。 。 。 . npm run build 捆绑 src/cli.ts,带有显示代码 它从API借到 dist/cli.mjs; 仅 @sanity/client 财务报告和审定财务报表 ajv 保持依赖关系.

从 main: 颠倒 version运行 npm publish --workspace=@anyday/sanity-workspace-manager --access public --auth-type=web 从 复发相根. 它首先建立和测试;网络登录覆盖 npm 的两要素检查,以及 然后在npmjs.com上发布等待批准.

版本与发布记录

@anyday/sanity-workspace-manager 共发布 10 个版本,首次发布于 2026/10/20;过去 12 个月发布了 10 个版本。

版本发布日期距今
0.8.0latest2026/11/09今天
0.7.12026/10/2417 天前
0.7.02026/10/2417 天前
0.6.02026/10/2218 天前
0.5.02026/10/2020 天前
0.4.02026/10/2020 天前

关于 @anyday/sanity-workspace-manager 的常见问题

@anyday/sanity-workspace-manager 是什么?

生成并检查一个网站 Repo 的工作空间管理器

如何安装 @anyday/sanity-workspace-manager?

在项目目录运行 npm install @anyday/sanity-workspace-manager,或使用 pnpm add / yarn add / bun add。它还提供命令行工具 sanity-workspace-manager,可以用 npx sanity-workspace-manager 直接运行。

@anyday/sanity-workspace-manager 支持 TypeScript 吗?

该包的 package.json 没有声明类型入口。需要类型提示时,可以在 npm 上查找社区维护的 @types/anyday__sanity-workspace-manager 是否存在。

@anyday/sanity-workspace-manager 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@anyday/sanity-workspace-manager 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=20。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@anyday/sanity-workspace-manager 可以商用吗?

@anyday/sanity-workspace-manager 使用 UNLICENSED 许可。作者声明为 UNLICENSED,即不授予公开使用许可(与公共领域的 Unlicense 不同)。使用前需获得作者授权。以上为概括,不构成法律意见,请以许可原文为准。

@anyday/sanity-workspace-manager 的下载量有多少?

根据 npm 官方下载统计,@anyday/sanity-workspace-manager 在 2026/10/06 – 2026/11/04 这 30 天内被下载 1,728 次,日均约 58 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@anyday/sanity-workspace-manager 还在维护吗?

最新版本 0.8.0 发布于 2026/11/09(今天);至今共发布 10 个版本,其中过去 12 个月发布了 10 个;首次发布于 2026/10/20。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。