应用文件夹外的内容
介绍
在某些项目中,您的内容文件位于安装TinaCMS的应用程序文件夹之外。例如,您的Next.js应用程序可能位于packages/website/中,而您的markdown内容位于顶级的content/文件夹中。
TinaCMS通过localContentPath配置选项支持这种布局。本指南将介绍如何设置它。
如果您的内容位于一个完全独立的Git仓库中,请参阅独立内容仓库指南。
示例结构
my-monorepo/├── content/ ← 您的markdown/MDX内容│ ├── tina/ ← 必需(TinaCMS在此处写入生成的文件)│ ├── pages/│ │ └── home.mdx│ └── posts/│ └── hello.md└── packages/└── website/ ← 您的Next.js应用├── tina/│ └── config.ts ← TinaCMS配置位于此处├── package.json└── ...
第1步:配置localContentPath
在您的tina/config.ts中,将localContentPath设置为指向您的内容目录。该路径是相对于tina/配置文件夹解析的,而不是项目根目录。
// packages/website/tina/config.tsimport { defineConfig } from 'tinacms'export default defineConfig({// 从packages/website/tina/ → 向上3级 → 进入content/localContentPath: process.env.TINA_CONTENT_PATH || '../../../content',build: {publicFolder: 'public',outputFolder: 'admin',},schema: {collections: [{name: 'post',label: '博客文章',path: 'posts', // 相对于内容根目录,而不是应用程序fields: [{type: 'string',name: 'title',label: '标题',},{type: 'rich-text',name: 'body',label: '正文',isBody: true,},],},],},})
使用环境变量来设置
localContentPath,因为相对路径可能因开发者克隆仓库的位置不同而异。
第2步:在内容目录中创建tina/文件夹
TinaCMS将生成的文件(tina-lock.json、__generated__/等)写入内容根目录中的tina/文件夹。此文件夹必须存在,否则CLI将失败并显示:
无法找到Tina文件夹,如果您在Tina配置之外的文件夹中工作,请确保指定--rootPath
创建它:
mkdir -p content/tina
您可以添加一个.gitkeep文件以确保它被Git跟踪:
touch content/tina/.gitkeep
第3步:设置相对于内容根目录的集合路径
当设置了localContentPath时,集合的path值是相对于内容根目录解析的,而不是应用程序文件夹。
例如,如果您的内容位于content/posts/:
// 正确 - 相对于内容根目录{name: 'post',path: 'posts',// ...}// 错误 - 会查找content/content/posts/{name: 'post',path: 'content/posts',// ...}
第4步:运行开发服务器
不需要特殊的CLI标志。只需像往常一样从您的应用程序目录运行:
cd packages/websitenpx tinacms dev -c "next dev"
您应该会看到:
🦙 TinaCMS开发服务器正在初始化...使用位于/path/to/my-monorepo/content的独立内容仓库TinaCMS开发服务器已激活
故障排除
"无法找到Tina文件夹 ... 指定--rootPath"
此错误意味着内容目录缺少tina/文件夹。使用mkdir content/tina创建一个。错误消息中的--rootPath建议对于此用例是误导的——它控制TinaCMS查找应用程序配置的位置,而不是内容目录。
找不到文档或集合为空
检查您的集合path值是否相对于内容根目录,而不是应用程序文件夹。如果localContentPath指向content/,那么path: "posts"解析为content/posts/,而不是content/content/posts/。
路径解析参考
localContentPath是相对于tina/配置文件夹解析的。仔细计算目录级别:
packages/website/tina/config.ts↑ ↑ ↑│ │ └── 文件│ └── localContentPath从这里解析└── ../../../content路径:tina/ → website/ → packages/ → 仓库根目录 → content/