
Hugo 中 index.md 和 _index.md 的区别,你真的搞懂了吗?
如果你在用 Hugo 建静态站时,有没有经常被 Hugo 的 index.md 和 _index.md 两个文件搞得晕头转向?它们长得这么像,但作用却完全不同。我们今天就来聊聊这两者的区别,以及在实际项目中该怎么使用它们。
要解释index.md与_index.md的区别,需要先弄清楚一个叫Page Bundle的名词。按Hugo官方的解释,Page Bundle就是一个“页面包裹”,把一个页面的内容和相关资源打包在一起,通俗的理解就是用一个目录来管理文章和图片等资源,把一篇文章和文章中的配图一起放在某个目录下,这个目录就是一个Page Bundle。
Page Bundle又分成了两大类,类比一棵树,一种叫叶子Page Budle,另外一种叫分支或树干Page Bundle。那怎么来区分一个Page Bundle到底是树叶,还是树干呢?
这个时候就轮到index.md和_index.md出场了,如果一个目录下包含_index.md文件的就是树干,反之只包含了index.md的目录就是树叶。
content/ ├── leaf/ │ ├── index.md # 表明leaf目录是leaf bundle │ └── leaf.jpg └── branch/ ├── _index.md # 表明branch目录是branch bundle └── branch.jpg 我们都知道树叶是一颗树的最末端,即树叶上不可能再长树干了,同理,包含index.md的目录也不能包含子目录了;而树干是可以继续长出树干和叶子的,所以类比到包含_index.md的目录,它是可以继续嵌套其它目录和子目录的。
如果同时存在 index.md 和 _index.md 的话,Hugo则优先选择使用 _index.md
Hugo页面有个方法叫 .Resources,这个方法可以提取出页面相关的所有资源,包括图片、音视频等,它提取的资源就是从对应的Page Bundle中提取出来的。
以上就是index.md和_index.md的主要区别与作用。
应用场景:
disableKinds = ["section", "taxonomy", "term"] 想象一下上面的配置,假设你不想让Hugo构建某些类型的页面时,_index.md就派上用场了。虽然页面上没有相关链接,但是咱们管不住那些好奇宝宝啊,用户可能手动输入了某个分类的url但我们又没有让Hugo构建这个分类页面,于是系统就会显示一个系统自带的 404 页面找不到的提示给用户,这让用户感觉你的站点损坏了或者出现了什么未知错误,而使用 _index.md 就可以轻松避免这种尬干的场景。