让Astro的 content 目录支持符号链接
订正
这篇水文发出来没到一个月官方就支持符号链接了PR戳我… 所以大家直接用就可以了。
前言
自打我用 Astro 重写博客后,我开始思考博客文章应该放在项目何处的哲学问题。
我认为博客文章很明显是不随前端框架变化的独立数据源,前端框架只要知道这些数据长什么样子就可以了,而把这些数据提交进前端框架的版本管理里怎么想都不是个好点子。
比如以前在 Hexo 里文章在 source/_posts
下,现在 Astro 要求必须放在 src/content
,虽然路径变了,但是其实还是同样的文件,所以我做出了一个决定:
将博客文章单独放进一个 Git 仓库中!
思路
对于本地编辑而言,我会在 Astro 的对应目录下创建一个软符号链接来指向真正的文章存放目录:
ln -s ~/dev/docs/blog ~/dev/frontEnd/astro-blog/src/content/blog
记住在.gitignore
中排除这个目录,因为符号链接可以被提交进版本管理,但我们并不需要。
而对于 前端仓库的 CI 而言,我会在 Github Action 中将文章对应的 repo checkout 到对应目录:
steps:
- uses: actions/checkout@v4
- name: Checkout blog repo
uses: actions/checkout@v4
with:
repository: PaiJi/blog
ref: main
path: src/content/blog
token: ${{ secrets.PAT }}
结局 1
你的 CI 工作得很好,但是你的本地编辑爆炸了,你得到了错误:
UnknownContentCollectionError
Unknown Content Collection Error.
你放弃了,开始把文章复制到 Astro 项目中。
结局 2
你搜索来到了这篇文章,解锁了以下神秘代码,可以让 Vite 老老实实干活:
// astro.config.mjs
export default defineConfig({
vite: {
resolve: {
preserveSymlinks: true,
},
},
});
你的项目工作得非常好!你感到十分高兴,并决定当场写一篇文章,叫做《让 Astro 的 content 目录支持符号链接》。