跳到正文
v0.6.5

站点配置参考

Canofold 从项目根目录加载一个 canofold.config.ts、.mts、.cts、.js、.mjs 或 .cjs。多个同名变体会被视为歧义,未知字段和非法值会直接报错。

ts
import { defineConfig } from 'canofold'export default defineConfig({  title: 'Acme Docs',  description: 'Acme 平台开发文档',  siteUrl: 'https://docs.acme.com',  basePath: '/',  requiredVersion: '^0.6.5'})

defineConfig() 不会改写配置,只为整个对象及其嵌套字段提供类型检查和编辑器补全。直接导出对象仍然受构建期 Schema 校验。

站点与目录

表格
titleCanofold站点名称和默认页签标题
descriptionTechnical documentation页面未写 description 时的站点描述
siteUrl未设置canonical、hreflang 和 sitemap 使用的 HTTP(S) origin,不包路径、查询和哈希
basePath/子路径部署前缀,必须以 / 开头和结尾
editUrl未设置“编辑此页”的 HTTP(S) URL 前缀,不允许查询和哈希
github未设置页头 GitHub 入口的 HTTP(S) URL
requiredVersion未设置当前 CLI 必须满足的 semver 范围
docsDirdocs单版本内容目录;不能与 versions 同时配置
outputDir.canofold/dist静态站点输出目录
markdownMirrortrue是否在每个 HTML 页面旁生成 Markdown 原文;关闭后 ai/index.md 改用 HTML 链接
styles[]在默认样式之后加载的站点级项目 CSS;组件 Demo 的 CSS 应由组件入口导入
seo.robotsallowrobots.txt 使用 Allow: / 或 Disallow: /;这只是抓取提示,不是访问控制

siteUrl 只写 origin,子目录由 basePath 表达。editUrl 和 github 未确定时直接省略。关闭 layout.header 不会移除正文侧栏、页内导航或搜索快捷键。

Markdown

表格
markdown.htmlsanitize普通 Markdown 的 Raw HTML 策略:trusted、sanitize 或 strip;MDX 仍是可执行的可信代码
markdown.code.themes内置亮色/暗色主题替换 Shiki 主题名
markdown.code.fallbackLanguagetext未声明语言时的围栏标签
markdown.code.overflowwrap长行默认自动换行;设为 scroll 后保持单行并允许横向滚动
markdown.code.unknownLanguagewarn遇到未知围栏语言时使用 warn、error 或 plain-text
markdown.features各项启用分别关闭 Callout、Tabs、Code Group、Steps、Terminal、文档块、表格或代码块
markdown.labels按 locale 使用内置文案覆盖 Markdown 交互的可访问性文案
markdown.plugins[]受信任的构建期 Markdown 插件,按数组顺序执行

独立使用 <Markdown> 时,HTML 默认值是 strip,与 Canofold 站点配置的 sanitize 不同。接入方法见 Markdown,插件配置见官方插件。

单个代码围栏可用独立的 wrap 或 scroll 元数据覆盖站点默认值,例如 ```ts scroll。它可以与 title="file.ts"、行高亮和 diff 标记同时使用。

组件示例

表格
demos.engine未设置组件 Demo 引擎;Vite 项目使用 vite()
demos.setup未设置可选的共享 React 包装组件,用于 Provider、主题或国际化上下文

Demo 引擎是 Canofold 的可替换能力,不改变项目原有构建工具。@canofold/vite 会读取已有 vite.config,并把 Vite 中间件和 HMR 接到 Canofold 的同一个开发服务器。完整用法见组件示例。

主题、品牌、布局与搜索

表格
themes[canofold]按顺序排列的 ThemeDefinition[];第一项的第一个外观是默认值
branding.logo / logoDarkCanofold 明暗 Logo所有主题共用的品牌图片
branding.faviconCanofold favicon站点 favicon
layout.headertrue是否渲染品牌、顶部导航、搜索入口和语言/版本控件
layout.sidebarWidth17.5rem桌面端侧栏宽度
layout.outlineWidth18.75rem桌面端页内导航宽度
search.enabledtrue生成搜索索引和客户端入口
search.providercompact内置 compact 或实现 SearchProvider 的对象,如 pagefind()
checks.rules{}按规则覆盖检查级别:off、warning 或 error;未配置时使用内置级别

主题定义来自 @canofold/themes 或第三方包,负责本地化名称、CSS 入口和外观;Core 负责布局、行为、持久化和无障碍。主题配置见定制主题,搜索选择见配置搜索。

站点能力

表格
extensions[]{ resolve, options } 列表;resolve 必须以 ./ 开头,options 必须可 JSON 序列化
navigation{}按 locale 配置的 { text, link, activePaths? }[];未配置时从一级内容分区生成
versions当前版本 current{ current, items };当前版本必须使用 /,每个 id 和 base 唯一
redirects{}旧路由到现有站内路由的映射;链、环和覆盖真实页面都会失败
advertising未设置{ image, href, alt, label? } 右侧图片位

对应流程见导航、版本、重定向、扩展和广告。

多语言与 AI 输出

表格
i18n.defaultLocalezh无 URL 前缀的默认语言
i18n.locales['zh']需要构建的 locale 列表
i18n.localeNames{}语言切换器显示名
i18n.messages{}按 locale 覆盖站点和 Markdown 界面文案
ai.llmsTxttrue生成 llms.txt
ai.llmsFullTxttrue生成 llms-full.txt 或 Manifest 指针
ai.pageIndextrue生成 ai/pages.json
ai.fullContenttrue生成 ai/manifest.json 与 ai/content/* 分片
ai.markdownIndextrue生成 ai/index.md
ai.pageSummariestrue生成 ai/summaries.json
ai.codeExamplestrue生成 ai/code-examples.json
ai.chunkSizeBytes262144单个 JSONL 内容记录的编码字节上限
ai.llmsFullMaxBytes10485760兼容单文件的容量上限
ai.llmsFullOverflowmanifest超限时写 Manifest 指针或使用 error 停止构建
ai.versionscurrent只发布当前版本,或使用 all 发布全部版本

添加语言见配置多语言,文件结构与收录规则见 AI 友好输出。

这些开关互不依赖;如果关闭 ai.fullContent,但 llms-full.txt 超过容量上限且使用 manifest 策略,构建会失败,因为不能指向不存在的 Manifest。可提高上限、关闭 ai.llmsFullTxt,或重新开启分片。