乐于分享
好东西不私藏

GitHub 8.2K Star!这个文档框架让你5分钟搭出高颜值技术文档站

GitHub 8.2K Star!这个文档框架让你5分钟搭出高颜值技术文档站


不知道你有没有这种经历?花了几天写了个超棒的开源项目,结果文档站搭得稀烂,用户进来就迷路。或者是公司技术文档用传统的 Wiki,搜索功能跟没有一样,找个 API 说明要翻半天。

我最近发现一个特别香的项目,叫 Starlight。这是 Astro 团队官方出品的文档站框架,在 GitHub 上已经拿了 8.2K 的 Star,而且增长势头很猛。说白了,它就是为了解决”技术文档长得丑、难用、加载慢”这些痛点而生的。

Starlight 官网展示

第一眼看到 Starlight 的演示站,我就被惊艳到了。暗黑模式支持得特别自然,不是那种硬切黑白,而是整套配色都做了适配。而且你注意到没有,它的搜索功能是开箱即用的,不需要你去接 Algolia 或者配置什么复杂的搜索服务,部署完就能直接用。

更爽的是,Starlight 基于 Astro 构建,天生就带了性能优势。页面加载速度贼快,Lighthouse 跑分基本都能到 95+。StackBlitz 团队都说这是他们用过 DX(开发体验)最好的文档工具 。

动手试试,真的只要5分钟

别光看我吹,咱们直接上手搞一个。你需要先装好 Node.js(建议 18 版本以上),然后打开终端:

npm create astro@latest -- --template starlight

这时候会问你项目叫什么名字、要不要装依赖之类的,按提示选就行。我一般是选 TypeScript 严格模式,毕竟文档站后面大概率会加一些自定义组件,类型安全还是很重要的。

装完之后进目录:

cd 你的项目名npm run dev

打开浏览器访问 http://localhost:4321,你就能看到一个像模像样的文档站了。默认就已经有了首页、搜索框、侧边栏导航,甚至还带了”编辑此页”的链接。这开箱体验,比某些要配置半天导航栏的工具强太多了 。

搜索功能展示

怎么往里加内容?

Starlight 的内容都放在 src/content/docs/ 这个目录下。你每创建一个 Markdown 文件,就会自动生成一个对应的页面。

比如你想加个”快速开始”的页面,就新建 src/content/docs/getting-started.md

---title: 快速开始description: 5分钟上手我们的项目---# 快速开始欢迎使用!按照下面的步骤,几分钟就能跑起来...

看到上面那两个 --- 包裹的东西没?那是 frontmatter,用来配置页面标题、描述这些元信息的。Starlight 会读取这些信息自动生成页面标题、SEO 标签,还有右侧的目录导航。

如果你想搞个多级结构,直接建文件夹就行。比如 src/content/docs/guides/installation.md 会自动对应到 /guides/installation 这个路径。这种基于文件的路由方式特别直观,不用去配置文件里写一堆路由规则 。

而且 Starlight 不只是支持 Markdown,它还原生支持 MDX 和 Markdoc。这意味着你想在文档里插 React 组件、Vue 组件都行,灵活性拉满。之前用其他文档工具,想加个交互式 Demo 得折腾半天,现在直接写个组件导入就完事了 。

侧边栏和导航,配置起来超简单

很多文档工具最让人头疼的就是配置侧边栏,动不动就要写一大堆 JSON。Starlight 这方面做得挺人性化的,打开 astro.config.mjs 文件,找到 starlight 的配置项:

import { defineConfig } from'astro/config';import starlight from'@astrojs/starlight';exportdefault defineConfig({integrations: [    starlight({title'我的项目文档',sidebar: [        {label'指南',items: [            { label'简介'slug'index' },            { label'安装'slug'getting-started' },          ],        },        {label'参考',autogenerate: { directory'reference' },        },      ],    }),  ],});

看到那个 autogenerate 没?这是 Starlight 的懒人福音。你只要告诉它目录名,它会自动扫描 src/content/docs/reference/ 下的所有文件,按文件名排序生成侧边栏链接。这样你新增文档的时候,侧边栏会自动更新,不用每次都去改配置 。

如果你想让某个分组默认折叠起来,加个 collapsed: true 就行:

{label'高级用法',collapsedtrue,items: ['advanced/config''advanced/deploy'],}

多语言支持,做国际化没压力

要是你的项目需要支持多语言,Starlight 也帮你想好了。在配置里加上 locales

starlight({title'My Docs',locales: {root: {label'中文',lang'zh-CN',    },en: {label'English',lang'en',    },  },});

这样它就会自动处理语言切换,而且 SEO 也帮你做好了,会自动生成正确的 hreflang 标签。内容文件放在 src/content/docs/en/ 下对应英文版,放根目录就是中文。翻译的时候还可以给侧边栏标签单独配多语言版本,用户体验很完整 。

搜索、SEO、暗黑模式,全都内置了

说说搜索这个功能,真的太省心了。Starlight 内置了 Pagefind 搜索,这是一个纯前端的搜索方案,构建时会自动索引所有内容。部署之后用户就能全文搜索,支持中文分词,响应速度也很快。而且它是完全免费的,不像有些方案还要配搜索服务或者买商业授权 。

SEO 方面也是开箱即用,自动生成 sitemap,每个页面都有规范的 meta 标签。如果你想加 Google Analytics 或者百度统计,直接在 head 配置里插脚本就行:

starlight({head: [    {tag'script',attrs: {src'https://your-analytics.js',defertrue,      },    },  ],});

暗黑模式更是不用你操心,右上角自动有个主题切换按钮,而且会记住用户的选择。代码高亮也是自动适配主题,浅色模式下用一种高亮方案,切到深色模式就自动换另一套配色,读起来眼睛特别舒服 。

部署到哪儿都方便

因为 Starlight 生成的是静态 HTML,部署特别灵活。你可以丢到 Vercel、Netlify、Cloudflare Pages,或者国内的阿里云 OSS、腾讯云 COS 都行。甚至可以直接用 GitHub Pages 托管。

如果是部署到子目录(比如 https://example.com/docs/),记得在 astro.config.mjs 里加个 base 配置:

exportdefault defineConfig({base'/docs',integrations: [starlight({ title'My Docs' })],});

有团队把整个文档站从 Docusaurus 迁到 Starlight 后,构建产物从 8.2MB 缩减到 1.5MB,移动端访问量直接涨了 47% 。这性能提升,对于一些网络环境不太好的用户来说,体验差距非常明显。

不同主题展示

总结一下

Starlight 这项目最让我喜欢的地方,是它不折腾。你不需要为了好看的样式去调半天 CSS,不需要为了搜索功能去申请 API Key,也不需要为了 SEO 去手动生成 sitemap。这些东西它都内置了,而且做得相当专业。

当然,如果你需要深度定制,它也不会拦着你。毕竟是基于 Astro 的,你可以写自己的组件,可以扩展主题,甚至可以把 Starlight 集成到已有的 Astro 项目里当文档模块用 。

如果你正准备给项目搭文档站,或者现在的文档站用得不太爽,真的可以试试 Starlight。5 分钟搭个雏形,半小时就能上线 production-ready 的文档站,这效率提升可不是一点半点。

开源地址:https://github.com/withastro/starlight