You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何简化Jekyll中Markdown的图片插入操作?

简化Jekyll图片插入的几种实用方案

当然有办法解决这个麻烦!每次写全路径确实挺烦的,下面给你几个从简单到灵活的方案,按需选择就行:

方案1:全局配置图片基础路径(最省心的通用方案)

先在项目根目录的_config.yml里添加一个全局变量,统一管理图片的基础路径:

# _config.yml
image_base_path: "/assets/images/"

之后在Markdown里插入图片时,直接用这个变量拼接文件名就行:

![图片描述]({{ site.image_base_path }}aa.png)

这样做的好处是,哪天你想把图片目录改成/static/pics/,只需要改_config.yml里的一行,所有文章里的图片路径都会自动生效,不用一个个文件去修改。

方案2:单篇文章配置局部图片目录(适合图片按文章分类的场景)

如果你的文章图片是按文章分目录存放的(比如/assets/images/post_202405/),可以在文章的front matter里单独指定该篇的图片子目录:

---
title: "我的旅行日志"
image_subdir: "post_202405"
---

然后结合全局的基础路径,插入图片时这么写:

![海边日落]({{ site.image_base_path }}{{ page.image_subdir }}/sunset.png)

这种方式既能享受全局路径的便利,又能给单篇文章的图片做分类管理,避免所有图片堆在一个目录里。

方案3:自定义Liquid标签(最简洁的写法,适合追求效率的你)

如果觉得写Liquid变量还是有点麻烦,可以自己写个简单的Jekyll插件,自定义一个图片标签。不过要注意:GitHub Pages不支持自定义插件,如果你是自己部署或者用其他支持插件的平台,这个方案会非常爽。

步骤如下:

  1. 在项目根目录创建_plugins文件夹(如果没有的话),然后新建image_tag.rb文件,写入以下代码:
module Jekyll
  class ImageTag < Liquid::Tag
    def initialize(tag_name, text, tokens)
      super
      # 拆分输入的内容,第一个是alt文本,第二个是图片文件名
      @alt, @img_path = text.strip.split(' ', 2)
    end

    def render(context)
      # 优先用_config.yml里的基础路径,默认用/assets/images/
      base_path = context.registers[:site].config['image_base_path'] || '/assets/images/'
      "<img src='#{base_path}#{@img_path}' alt='#{@alt}' />"
    end
  end
end

# 注册自定义标签,命名为img
Liquid::Template.register_tag('img', Jekyll::ImageTag)
  1. 之后在Markdown里插入图片只需要写:
{% img 海边日落 sunset.png %}

不仅写法极短,还能统一控制图片的HTML输出格式(比如后期想给所有图片加个class="post-image",直接改插件里的代码就行)。

注意事项

  • 如果用GitHub Pages托管,方案1和方案2是最稳妥的,因为GitHub Pages禁用了自定义Ruby插件;
  • 不管用哪种方案,确保图片的实际存放路径和你配置的路径完全对应,不然会出现图片加载失败的情况。

内容的提问来源于stack exchange,提问作者frhyme

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 08:23:29