此博客是使用Hugo生成的。我正在重建的一个文档网站也是用雨果制作的。这两个项目让我有机会了解这个工具,时而欣赏它,时而诅咒它。
我的一些抱怨是静态站点生成器固有的,其他的则是针对Hugo的。
在其最简单的形式中,静态站点生成器获取一个充满标记文件的目录树,并生成一个结构相同的充满HTML文件的目录树。
预计目录的形状将影响生成器的工作方式。
Hugo积累了如此多的功能,以至于上面描述的简单模型已经成倍增长,以至于不再容易地知道文件具有什么效果,或者为什么某些文件没有您认为应该具有的效果。
请看一下模板查找顺序“帮助页面”。雨果在这里做了很多事情,它的多语言能力,它的分类法,等等…。但从示例的数量和可能的查找位置可以看出,这些功能是以复杂性为代价的。
我认为文件系统不是描述帖子、语言、模板和输出格式之间复杂关系的合适工具。太容易迷路了。
我花了一段时间才明白_index.md和index.md不是一回事。一个用于显示帖子列表,另一个是页面包中的帖子本身。或者类似的东西。我用错了一段时间,没有收到任何错误,但我的目录似乎不起作用。我花了很多时间解决这个问题。
我在使用该工具时遇到了许多类似的微妙行为问题。例如,有不同的“种类”的页面和不同的“类型”的页面,并且它影响页面是否显示在页面集合中等等。(别让我解释,我不能解释。)。关键是有很多概念,这些概念并不都直观地工作,工具行为方式之间的差异可以归结为文件名中的单个下划线。
我遇到了另一个问题,我想在短代码中呈现内容中的标记。在这里,一个小角色又一次产生了很大的不同。此{{<;短码>;}}与{{%短码%}}不同。随着时间的推移,这种行为发生了变化,造成了混乱,你猜怎么着?虽然我看了文档,但我的网站上的行为与文档所暗示的相反。
当然都是我的错。一切都有记录在案。问题是,文档的运行时间比典型的“学习编程语言”卷要长。我实际上还没有统计过字数,但似乎有很多东西比我应该经历的要多得多,才能呈现一个博客或一些文档网站。“内容管理”一节有24页,每个页面都引入了新概念和新标志,以便在您的配置中进行调整。
你可能会说“它很强大,要靠你来学习”。我不会争辩说它不强大,但是如果它依赖于下划线以外的其他东西来表示文件的某些内容,那么使用这种强大的东西可能会更明智。文件树真的是用户实现其目标的最佳抽象吗?
我理解在文件树中使用文本文件的好处:可以从用户最喜欢的文本编辑器处理这些文件,并且可以将其全部签入到版本控制中。很好。
问题是文本编辑器的工具很弱。如果有东西是如此复杂和强大,并且打算被视为“代码”,那么我的期望就会相应地增加:实时错误报告在哪里?“调试器”在哪里?自动完成?
例如,您可以使用“relref";”创建指向站点内页面的链接。最酷的是,如果你在链接中放了一个打字错误,网站将无法构建。保证链接正确!我喜欢。但是它的工作方式是您在文本编辑器中键入您的内容,在某个时候点击保存,然后并且只有到那时您的Hugo构建才会抛出一个错误。
这让你想起什么了吗?这让我回想起90年代的工程学校,那时我正在学习Fortran 77(以及新的热门Fortran 90!)。编写代码。救人啊。运行编译器。OOPS错误。查找错误文件和行。想想吧。啊哈!修吧。救人啊。运行编译器。以及在…上
我不知道你怎么样,但我不再这样工作了。无论我是写围棋还是打字,我都能在打字时看到我的错误,并得到关于哪些是真正正确的建议。这些语言的创造者提供工具来帮助我,因为他们感受到了我的痛苦。我在写神秘的文字,但我得到了很多帮助。当我在雨果做事情时,我几乎得不到任何帮助。
如果模板不能像您预期的那样工作,而您想要单步执行它,就好像它是普通代码一样,那就太糟糕了。一个有用的文档页面建议您将“printf”语句放入模板中。90年代的人打来电话,他们想要回他们的调试器。
当我使用relref创建内部链接时,为什么不能自动完成?如果我的推荐人有打字错误,难道我不应该得到一个红色的曲折下划线吗?使用快捷码时自动完成如何?(我试着在我的VSCode中安装这个扩展,但是除了为我输入的每个英文单词都弹出一个自动补全功能之外,它似乎没有什么作用。)。
我希望能够单击任何快捷代码,或选择任何文件,并有一个工具告诉我它从哪里获取将用于呈现它的模板,以及输出将到哪里。
但是我没有这些,所以当一些东西不像我期望的那样工作时,我最终只能玩一个冗长而令人沮丧的猜谜游戏。
我一开始真的很想喜欢雨果。在我意识到我将不得不把我的网络内容创作工具放在Backburner上之后,我开始了这项工作。
我想,如果我不能建造一些伟大的东西,那么我应该从现存的东西中挑选最好的,并学会与我不喜欢的东西生活在一起。
已经一年多了,我就是找不到对雨果的爱。我使用它,当它都设置正确时,它是有效的。但是,它感觉像是一个非常强大的工具吗?一辆自行车给我创造内容的头脑?一点也不。
艾伦·凯(Alan Kaye)有一个很棒的演讲,名为“复杂吗?还是我们把事情复杂化了?“。这也适用于这里。
静态站点生成器已经超越了使它们变得伟大的界限:它们是解决简单问题的简单工具。通过让他们做更多的事情,他们变得复杂了,效率也降低了。
PS:我很抱歉没有包括正确的代码片段。原来,如果我将Hugo短码包装在代码块中,Hugo会尝试将它们解释为实际的短码。如果我用\对字符进行转义,它会呈现斜杠,如果不这样做,它就会崩溃,并显示“空指针取消引用错误”。耶。