Hugo 游乐场内容初始化示例详解
正文
使用Hugo构建站点的体验很棒。 首先是构建速度快,其次是使用起来简单,一个hugo
命令,我们的站点就已经就绪。
在构建过程中,Hugo提供了丰富的内置功能函数,可以在构建过程中向你提供所需要的几乎任何站点相关的信息。 通过可重用模板,让主题来帮助处理所有展示和布局相关的问题。 让作者更专注在内容的创作上。
Hugo 游乐场
站点构建的就将写好的内容,转化成Web服务器能理解的网站资源。 比如我们写作的时候用的是Markdown格式,生成的网站资源通常是HTML格式。
下面是一个简单的初始化博客内容:
-- config.toml -- theme = "mytheme" contentDir = "mycontent" -- myproject.txt -- Hello project! -- themes/mytheme/mytheme.txt -- Hello theme! -- mycontent/blog/post.md -- --- title: "Post Title" --- ### first blog Hello Blog -- layouts/index.html -- {{ $entries := (readDir ".") }} START:|{{ range $entry := $entries }}{{ if not $entry.IsDir }}{{ $entry.Name }}|{{ end }}{{ end }}:END: -- layouts/_default/single.html -- {{ .Content }} === Static Content ===
可以看到我们自定义了一个主题mytheme,只有一个mytheme.txt文件,并没有实际的模板文件。 这将会在下面的构建流程讲解中,帮助我们理解到主题是如何嵌套和加载的。
我们的内容文件夹是mycontent,在blog目录下有一篇简单博文/blog/post.md。 如果想要独立访问这篇博文,就需要为她生成一个HTML文件,这样我们就可以在浏览器中访问了。
在样例中,为了生成首页和博客,我们还在layouts下创建了两个模板。 一个是首页模板index.html,另一个则是单篇文章会用到的模板_default/single.html。
通过golang tools txtar解析上述文本,方便我们转换成如下结构的磁盘文件:
. ├── config.toml ├── layouts │ ├── _default │ │ └── single.html │ └── index.html ├── mycontent │ └── blog │ └── post.md ├── myproject.txt └── themes └── mytheme └── mytheme.txt
通过Hugo命令进行构建,就能生成如下站点资源:
➜ public tree . ├── blog │ └── index.html ├── index.html └── robots.txt
并包含了我们想要的信息:
站点首页
➜ public cat index.html START:|config.toml|myproject.txt|:END:%
博客页面
➜ public cat blog/index.html <h3 id="first-blog">first blog</h3> <p>Hello Blog</p> === Static Content === %
那Hugo的这个魔术到底是怎么变出来的呢?
为了了解Hugo构建的核心原理,通过对Hugo最新源码进行裁剪,移除当前阶段不必要的"噪音"。 结合我们上面的实例,手动生成了一个最小可工作源码库 - hugo游乐场。 以保证我们在这个游乐场可以尽情地玩耍,专注于核心原理,享受整个源码的学习过程。
通过命令:
git ls-files | grep '.go' | xargs wc -l
分别统计gohugoio/hugo和hugo playground的代码行数。 我们得到的数据分别是 163075 和 33990 行。
整整缩减了近四倍!
相信各位看官也会虎躯一震,信心倍增!看源码原来也可以这么开心。 请准备好瓜子饮料小板凳,各位看官你细听分说。
Show Me The Code
package main import ( "bytes" "fmt" "path/filepath" "golang.org/x/tools/txtar" ) // 文件结构 // 文件名: config.toml // 文件内容:theme = 'mytheme' var files = "-- config.toml --\n" + "theme = 'mytheme'" func main() { // 解析上面的文件结构 data := txtar.Parse([]byte(files)) fmt.Println("File start:") // 遍历解析生成的所有文件,通过File结构体获取文件名和文件数据 // f.Name 获取文件名 // f.Data 获取文件数据 for _, f := range data.Files { filename := filepath.Join("workingDir", f.Name) data := bytes.TrimSuffix(f.Data, []byte("\n")) fmt.Println(filename) fmt.Println(string(data)) } fmt.Println("File end.") }
Output:
# 解析后得到文件config.toml,以及下面的文件内容 # workingDir就是我们的工作目录,通常是要写入的文件目录 File start: workingDir/config.toml theme = 'mytheme' File end.
Try it yourself
以上就是Hugo 游乐场内容初始化示例详解的详细内容,更多关于Hugo 内容初始化的资料请关注猪先飞其它相关文章!
原文出处:https://juejin.cn/post/7145825667148415006
相关文章
- 这篇文章主要介绍了解决vuex数据页面刷新后初始化操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-07-26
Vue初始化中的选项合并之initInternalComponent详解
这篇文章主要介绍了Vue初始化中的选项合并之initInternalComponent的相关知识,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-06-11- 这篇文章主要介绍了C#中数组初始化与数组元素复制的方法,涉及C#中数组的创建、初始化及使用Array.Copy方法复制数组元素的技巧,需要的朋友可以参考下...2020-06-25
- 这篇文章主要介绍了C#控制台基础 list<>初始化的两种方法,需要的朋友可以参考下...2020-06-25
- 这篇文章主要介绍了go嵌套匿名结构体的初始化详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-12-16
- C#数组与其它C系列语言有着很多的不同,以前接触的时候理解出现很大的偏差。尤其是对多维数组的认识,本文将详细介绍C#数组初始化,需要的朋友可以参考下...2020-06-25
- 这篇文章主要介绍了Django表单外键选项初始化的问题及解决方法,需本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,要的朋友可以参考下...2021-04-29
- 这篇文章主要介绍了c++ 子类构造函数初始化及父类构造初始化的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-07-17
- 安装完MySQL后,系统默认会创建一个不需要密码的root用户,和一个无用户名无密码的匿名用户(Anonymous Account)。进行下面的初始化操作以合理授权,增强安全...2016-01-29
- 这篇文章主要介绍了c++ 数组定义及初始化详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-12-10
- 这篇文章主要介绍了redission分布式锁防止重复初始化问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-01-15
- 这篇文章主要介绍了Angular.js基础学习之初始化的相关资料,AngularJS 启动有两种方式,一种是绑定初始化,自动加载,另外一种是手动初始化,文中介绍的很详细,需要的朋友可以参考下。...2017-03-13
- 通常静态数据成员在类声明中声明,在包含类方法的文件中初始化.初始化时使用作用域操作符来指出静态成员所属的类.但如果静态成员是整型或是枚举型const,则可以在类声明中初始化...2020-04-25
- 这篇文章主要给大家介绍了关于C++中各种初始化方式的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用C++具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。...2020-04-25
Pytorch - TORCH.NN.INIT 参数初始化的操作
这篇文章主要介绍了Pytorch - TORCH.NN.INIT 参数初始化的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-02-27- 今天小编就为大家分享一篇关于C++类中变量也可以是引用的代码实例,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧...2020-04-25
- 今天小编就为大家分享一篇关于tensorflow的几种参数初始化方法小结,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-04-30
- 这篇文章主要介绍了c#对象初始化顺序,实例分析了C#对象初始化的相关使用技巧与调用顺序,需要的朋友可以参考下...2020-06-25
- 这篇文章主要给大家介绍了关于spring源码学习之bean的初始化以及循环引用的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-10-03
- 今天小编就为大家分享一篇关于C++使用初始化列表的方式来初始化字段的方法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧...2020-04-25