前面在网上看教程和自行探索hugo搭建时,学习的到对主题的处理方法简单粗暴,把主题包放入themes文件夹后,把archetypes、assets、layouts、static等文件夹直接复制到hugo的根目录。
根据近期的使用与总结,发现hugoH覆盖机制,不需要复制所有的文件夹到根目录,如果对主题模板有需要改动的地方,只需要按照主题的目录结构,在hugo根目录下创建对应的目录结构,仅放入修改或增加的文件即可。
比如本站当的主题,原footer.html底部是没有备案信息的,我们可以保持主题目录不动,在hugo根目录下创建对应的layouts\partials目录放入修改好的footer.html,hugo在构建时会优先从根目录加载这些文件,然后再到主题中拉取模板文件,根目录有过的文件,主题目录的同名文件不会再次被加载。
TEXT
your-blog/ (博客根目录)
├── layouts/ (创建的覆盖目录)
│ └── 404.html (自行添加的文件)
│ └── partials/ (只包含您要修改的文件)
│ └── footer.html (Hugo 会优先使用这个文件)
│
└── themes/
└── hugo-narrow/ (原始主题)
├── layouts/
│ └── partials/
│ ├── header.html (原始文件)
│ ├── footer.html (原始文件)
│ └── ...
同样也可以增加文件,当前主题作者没有单独写404.html,于是我们可以在根目录的layouts下自己添加一个。
这样处理的优点:
- 更新友好:把主题安装为子模块,当主题更新时,只需更新子模块,未覆盖的部分会自动使用新版本,不会把修改的内容覆盖掉,也不会因为全复制过来而不忘记对应主题修改了哪些文件。
- 文件简洁:根目录只包含您实际修改的文件,而不是整个主题的副本
- 减少冲突:Git只跟踪修改的文件,避免不必要的冲突
- 性能优化:Hugo 构建时不需要处理大量重复文件
主题中哪些内容支持这样的覆盖:
- layouts/ 下的任何模板文件(.html)
- assets/ 下的 CSS/JS 资源
- static/ 下的静态文件
- content/ 下的内容文件
- i18n/ 国际化文件
- data/ 数据文件
- archetypes/ 内容模板
最后,还是要多看文档。
评论