如何在本地Sanity Studio修改内容而不同步至生产站点?
解决Sanity修改内容不自动推生产的问题
1. 先确认本地Studio连对了staging数据集
你之前加了staging数据集但还是推生产,大概率是本地Studio的配置没改对。打开sanity.config.ts(或旧版的sanity.json),把数据集名称改成你的staging:
// sanity.config.ts export default defineConfig({ projectId: '你的项目ID', dataset: 'staging', // 这里必须写staging,别留着production // 其他配置不动 })
改完重启本地Studio服务(sanity start),不然配置不会生效。
2. 让Next.js环境区分数据集
生产站点不能拉staging的数据,得给Next.js加环境变量做区分:
- 项目根目录建两个文件:
.env.local(本地开发用)和.env.production(生产用):# .env.local NEXT_PUBLIC_SANITY_DATASET=staging NEXT_PUBLIC_SANITY_PROJECT_ID=你的项目ID # .env.production NEXT_PUBLIC_SANITY_DATASET=production NEXT_PUBLIC_SANITY_PROJECT_ID=你的项目ID - 然后在Sanity客户端配置里读这些变量:
这样本地开发拉staging的内容,生产环境只拉production的,两边彻底隔离开。// lib/sanity/client.ts import { createClient } from 'next-sanity' export const client = createClient({ projectId: process.env.NEXT_PUBLIC_SANITY_PROJECT_ID, dataset: process.env.NEXT_PUBLIC_SANITY_DATASET, apiVersion: '2024-01-01', // 用最新的API版本 useCdn: process.env.NODE_ENV === 'production', })
3. 用Sanity草稿模式替代独立数据集(可选)
如果不想搞多个数据集,直接用Sanity的草稿功能也行:
- 编辑内容时别点“发布”,选“保存为草稿”,这样内容只会存在于草稿区,生产站点不会拉取草稿内容。
- 还能开内容审核,要发布的内容必须过审才能上线,误操作的概率更低。
4. 检查部署平台的环境变量
要是用Vercel、Netlify这类平台自动部署,得确保生产环境的变量是对的:
- 在平台的生产环境配置里,把
NEXT_PUBLIC_SANITY_DATASET设成production,别和本地的staging搞混。 - 部署脚本里别加载本地的
.env.local,确保生产构建用的是生产环境的变量。
内容的提问来源于stack exchange,提问作者jnemec84
相关产品推荐
相关产品推荐

