管理博客中的图片、CSS 或 JS 文件时,如果所有资源都堆在一个大文件夹里,随着文章增多,你会很难分清哪张图片属于哪篇文章。Hexo 提供的“资源文件夹(Asset Folder)”功能,就像是为每篇文章配备了一个专属的“附件箱”,让资源管理与文章本身紧密绑定。
全局资源文件夹 vs 文章资源文件夹
在深入配置之前,我们需要区分两种资源管理方式:
1. 全局资源文件夹
这是最基础的方式。你可以将所有公共图片放在 source/images 这样的目录下。
- 引用方式:使用绝对路径,例如
。 - 适用场景:适用于全站通用的资源,如 Logo、背景图、公共图标等。
- 缺点:当项目变大,这个文件夹会变得杂乱无章,难以维护特定文章独有的素材。
2. 文章资源文件夹 (Post Asset Folder)
这是更高级的组织方式。它为每一篇文章创建一个同名的文件夹,专门存放该文章独有的资源。
- 核心优势:资源与文章一一对应,删除文章时资源也能一并清理,且支持相对路径引用,迁移文章时更方便。
- 比喻:如果把文章比作“信件”,全局文件夹像是“公共仓库”,而文章资源文件夹则是随信附带的“专用信封”,里面只装这封信需要的照片和附件。
配置说明与开启方法
要启用文章资源文件夹功能,你需要修改站点根目录下的 _config.yml 配置文件。
配置项: post_asset_folder
- 作用:控制是否在为每篇新文章创建时,自动生成一个同名的资源文件夹。
- 默认值:
false(关闭) - 开启设置:
1 | post_asset_folder: true |
工作流程变化:
开启此选项后,当你执行新建文章命令时:
1 | hexo new post "my-first-trip" |
Hexo 不仅会创建 source/_posts/my-first-trip.md,还会自动创建一个名为 source/_posts/my-first-trip/ 的文件夹。你只需要将与这篇文章相关的图片(如 photo1.jpg)放入这个文件夹中即可。
引用资源的正确姿势
开启资源文件夹后,引用方式发生了关键变化。如果你继续使用标准的 Markdown 语法(如 ),图片在首页或归档页可能会无法显示。这是因为 Hexo 需要特殊的处理逻辑来解析相对路径。
方法一:使用标签插件 (推荐,兼容性最好)
Hexo 提供了三个专用的标签插件来引用文章资源文件夹中的内容。这些插件能确保图片在文章页、首页和归档页都能正确渲染。
1. 引用图片 (asset_img)
- 语法:
{% asset_img slug [title] %} - 参数说明:
slug:文件名(包含扩展名)。如果文件名包含空格,需用引号包裹。title:可选,图片的标题或 alt 文本。
示例:
1 | <!-- 基本用法 --> |
2. 引用资源路径 (asset_path)
- 语法:
{% asset_path slug %} - 作用:仅获取资源的相对路径链接,不直接渲染图片或标签。常用于自定义 HTML 结构或脚本引用。
示例:
1 | {% asset_path script.js %} |
3. 引用资源链接 (asset_link)
- 语法:
{% asset_link slug [title] %} - 作用:生成一个指向资源文件的下载链接或访问链接。
示例:
1 | {% asset_link "data-sheet.pdf" "下载数据表" %} |
概念辨析:为什么不能用 ?
在标准 Markdown 中, 是相对于当前 Markdown 文件所在路径的。但在 Hexo 生成静态网站时,文章会被渲染到不同的目录层级(如 /2026/03/09/title/index.html)。如果不经过特殊处理,简单的相对路径在首页(通常是列表页)会找不到图片资源。标签插件 asset_img 会自动计算正确的绝对路径,确保在任何页面都能显示。
方法二:在 Markdown 中直接嵌入 (需特定配置)
如果你更喜欢原生 Markdown 语法,不想写 {% %} 标签,可以通过配置 hexo-renderer-marked 插件来实现自动解析。
前提条件:
- 已开启
post_asset_folder: true。 - 安装了
hexo-renderer-marked3.1.0 或更高版本。
配置步骤:
在 _config.yml 中添加或修改 marked 配置块:
1 | post_asset_folder: true |
参数说明:
prependRoot: 在路径前添加根路径。postAsset: 启用文章资源自动解析功能。
效果示例:
配置完成后,你可以直接在文章中使用标准 Markdown 语法:
1 |  |
Hexo 会自动将其解析为正确的路径。例如,如果文章位于 /2020/01/02/foo/,图片 image.jpg 在该文章的资源文件夹中,上述语法会被渲染为:
1 | <img src="/2020/01/02/foo/image.jpg" alt="描述文字"> |
总结与建议
- 少量公共资源:继续使用
source/images配合。 - 文章独有资源:务必开启
post_asset_folder: true。 - 引用方式选择:
- 如果你需要最大的兼容性和对旧主题的支持,请使用
{% asset_img ... %}标签插件。 - 如果你追求写作流畅度,且使用的是较新的
hexo-renderer-marked和现代主题,可以配置marked.postAsset: true从而直接使用语法。
- 如果你需要最大的兼容性和对旧主题的支持,请使用
- 注意事项:一旦开启资源文件夹功能,请养成将图片放入对应文章文件夹的习惯,避免文件散落在
source/_posts根目录下造成混乱。