如何在Jekyll中生成存于可变子目录的完整网站?
解决Jekyll生成文件到指定子目录(含变量命名)的问题
我之前在配合S3部署Jekyll站点时也碰到过存储桶不够用的情况,刚好能给你两个针对性的解决方案,完全适配你的需求:
一、指定固定子目录存储生成文件
Jekyll默认把编译后的文件输出到_site文件夹,要改到指定子目录很简单,有两种方式:
- 通过配置文件设置:在你的
_config.yml里添加一行:
这样每次执行destination: ./build/my-fixed-subdirjekyll build时,所有生成文件都会自动存入build/my-fixed-subdir目录下。 - 通过命令行临时指定:如果不想修改配置文件,也可以直接在构建命令里指定输出路径:
jekyll build --destination ./build/my-fixed-subdir
二、用变量动态设置子目录名称
如果每个站点需要不同的子目录名,咱们可以用环境变量或者自定义配置文件来实现:
方法1:环境变量动态拼接(推荐)
这种方式不需要修改配置文件,完全通过命令行控制:
- 先设置一个环境变量(不同站点设置不同值):
# Linux/macOS export SITE_SUBDIR="my-site-001" # Windows(PowerShell) $env:SITE_SUBDIR="my-site-001" - 然后执行构建命令时直接引用这个变量:
这样每次构建时,子目录名会自动替换成环境变量的值,非常灵活。jekyll build --destination ./build/$SITE_SUBDIR
方法2:专属配置文件
如果每个站点有独立的配置需求,可以给每个站点创建单独的配置文件:
- 比如给站点A创建
_config-siteA.yml,里面指定:destination: ./build/site-a - 构建时同时加载主配置和专属配置:
专属配置里的jekyll build --config _config.yml,_config-siteA.ymldestination会覆盖主配置的设置,实现不同站点输出到不同子目录。
为什么baseurl解决不了这个问题?
你提到的baseurl配置是用来设置站点在服务器上的访问路径(比如你的站点部署在example.com/my-site下,就设置baseurl: "/my-site"),它只会影响生成页面里的链接、资源路径,不会改变Jekyll编译后文件的存储目录,所以确实无法满足你输出到指定子目录的需求。
内容的提问来源于stack exchange,提问作者ElFitz
相关产品推荐
相关产品推荐

