@ 随时/ 卫生- 工作空间管理器
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团队; 留待任何一天 |
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:从第一次运行时的计画中猜出,询问何时断裂 |
生成
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 token | unset 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上发布等待批准.