Jekyll构建期间如何将someFancyPage.md重命名为同目录下的index.md?
针对你的需求——构建过程中把目录下的someFancyPage.md转为同目录的index.md,同时保留原文件(让你的插件能正常处理该文件夹),这里提供两种可行方案:
方法1:使用相对路径的Permalink(最简单)
Jekyll默认的Permalink会解析为根目录的绝对路径,但你可以通过相对路径写法让生成的文件留在原目录里:
打开
someFancyPage.md,在Front Matter中添加:--- permalink: ./index.md ---(如果你的目标是生成
index.html作为目录首页,把index.md改成index.html即可)若你需要输出MD格式而非默认的HTML,需在
_config.yml中添加配置:markdown_ext: md output_ext: md
这样配置后,Jekyll构建时会在someFancyPage.md所在的目录下生成index.md,原文件保持不变,你的插件依然能识别包含someFancyPage.md的文件夹。
方法2:自定义Jekyll钩子插件(更灵活)
如果Permalink的方式无法满足你的复杂需求,你可以写一个简单的Jekyll钩子插件,在构建过程中手动处理文件重命名:
在项目的
_plugins目录下创建rename_custom_page.rb文件(如果没有_plugins目录就新建一个),写入以下代码:Jekyll::Hooks.register :site, :post_render do |site| site.pages.each do |page| # 匹配目标文件 next unless page.name == "someFancyPage.md" # 获取原文件所在目录的输出路径 source_dir = File.dirname(page.path).sub(site.source, "") output_dir = File.join(site.dest, source_dir) FileUtils.mkdir_p(output_dir) # 将渲染后的内容写入同目录的index.md target_path = File.join(output_dir, "index.md") File.write(target_path, page.content) end end构建项目时,这个插件会在页面渲染完成后,自动把
someFancyPage.md的内容复制到同目录的index.md中,原文件完全不受影响,你的插件可以正常工作。
为什么之前的Permalink不生效?
你之前遇到的问题是因为Jekyll默认会把Permalink解析为根目录相对的绝对路径——比如写permalink: index.html,会生成在网站根目录下,而非原文件所在目录。而用./开头的写法,会强制Jekyll生成相对于原文件目录的路径,这正是你需要的效果。
内容的提问来源于stack exchange,提问作者Dennis Guse

