如何在Jekyll的_data与assets目录外部引用仓库中的文件?
如何在Jekyll的_data与assets目录外部引用仓库中的文件?
我完全懂你现在的麻烦——几百张图片和JSON文件,复制一遍既占空间又不好维护,软链接试了也没效果,哪怕关了安全模式也不行。其实这个问题可以从Jekyll配置调整和规避GitHub Pages限制两个方向解决,给你几个实用的方案:
方案1:修改Jekyll配置,直接指定外部数据源与资产路径
这是最省心的方法,不用搞任何链接,直接让Jekyll去读你仓库根目录的文件:
- 针对JSON数据文件:打开
MySite/_config.yml,添加一行data_dir: ../Data。这样Jekyll就会把仓库根目录的Data文件夹当作它的默认_data目录来读取,你在模板里还是可以用site.data.data1这种方式调用JSON里的内容,完全不用移动文件。 - 针对图片资源:不用改配置,直接在模板里用相对仓库根目录的路径引用就行,比如
/Images/imageFolder1/photo.jpg。不过要注意,如果你是在GitHub Pages上部署,一定要把_config.yml里的baseurl设置正确(比如你的站点是username.github.io/your-repo,那baseurl: "/your-repo"),这样生成的图片路径会自动带上仓库名,不会出现404。
本地测试的时候,记得在MySite目录下运行jekyll serve,Jekyll会自动解析../Data这种相对路径,完全没问题。
方案2:绕开GitHub Pages的软链接限制
你本地用软链接可能能正常工作,但GitHub Pages的官方构建环境默认强制开启安全模式,会直接忽略软链接(哪怕你本地关了safe模式也没用)。如果一定要用软链接,你可以换成GitHub Actions自定义构建:
- 写一个简单的GitHub Actions脚本,在构建前先创建软链接(比如在脚本里执行
ln -s ../../Images MySite/assets/images和ln -s ../../Data/*.json MySite/_data/),然后再运行jekyll build。这样就能绕开GitHub Pages的安全限制,软链接也能正常生效。不过这个方法需要你懂一点Actions的配置,适合愿意折腾的情况。
方案3:模板变量映射(适合少量文件,不推荐大量使用)
如果你的文件数量不多,也可以在MySite/_data里创建空的YAML文件,用include_relative来引用外部JSON内容,比如在MySite/_data/data1.yml里写:
--- {% include_relative ../../Data/data1.json %} ---
但你有几百个文件的话,这个方法太繁琐,还可能影响Jekyll的构建性能,所以只适合小体量的场景。
备注:内容来源于stack exchange,提问作者Osgboy
相关产品推荐
相关产品推荐

