# @anyday/sanity-workspace-manager 中文文档

规范地址：https://npmcn.com/package/%40anyday/sanity-workspace-manager/

版本：0\.8\.0
npm 元数据更新时间：2026-11-09T13:14:06.415Z
中文译文更新时间：2026-11-09T21:14:58.180Z
软件包许可：UNLICENSED

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40anyday/sanity-workspace-manager
原文对照：https://npmcn.com/package/%40anyday/sanity-workspace-manager/?lang=original
项目主页：https://github.com/anydayagency/anyday-workspace-manager-sanity#readme
源码仓库：https://github.com/anydayagency/anyday-workspace-manager-sanity

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：114 kB，4 个文件
- 模块格式：ES Module
- TypeScript 类型：未声明
- Node.js 要求：\>=20
- 运行依赖：2 个
- 首次发布：2026-10-19T20:46:55.209Z
- 最新版本发布：2026-11-09T13:14:06.204Z
- 近 30 天下载量：1728（2026-10-06 至 2026-11-04，npm 官方下载统计）
- 已发布版本数：10（近 12 个月 10 个）

## 中文简介

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

## 安装

```sh
npm install @anyday/sanity-workspace-manager
```

也可以使用：`pnpm add @anyday/sanity-workspace-manager`、`yarn add @anyday/sanity-workspace-manager`、`bun add @anyday/sanity-workspace-manager`

## README

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

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`,则 **署长** 扮演着"圣洁组织"的角色.

## 快开始

从站点根接回:

```bash
# 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` 提醒你,直到它在那里:

```text
workspace-manager.json linguist-generated=true
```

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

## 生成

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

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

```text
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` 再次读取活值.

### 启动页面

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

```text
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` 并且没有配置 : 它会移动每个选择 包含复制部分的标签、颜色描述和字体,输入配置. 然后列出现场网页,从中选择起始页;直到你选择,它保留了清单 已有启动页面.

## 检查

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

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

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

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

## 注册

```bash
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 token` | `unset SANITY_AUTH_TOKEN` 和使用情况 `npx sanity login` |
| `Register only as an Administrator of organisation …` | 请该组织的主管管理 `register` |

## 如何融为一体

整个设计,包括每个显示的领域,在 [文件/项目配置](https://github.com/anydayagency/anyday-workspace-manager-sanity/blob/main/docs/project-config.md), (中文(简体) ), 和如何生成工作在 [文献/显性遗传学](https://github.com/anydayagency/anyday-workspace-manager-sanity/blob/main/docs/manifest-generate.md) (每天只有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 是什么？

生成并检查一个网站 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 和提交记录判断。

