第8章 Hugo模块:面向所有人的插件

第8章 Hugo模块: 每个人的插件 #

本章涵盖

  • 使用Hugo模块分发和使用主题
  • 使用Hugo模块在主题或网站中添加依赖项
  • 嵌入模板插件以获得可重用的Go模板代码
  • 包括提供可配置内容的插件

在本章中,我们将设置并利用Hugo模块-Hugo最强大,被低估和未充分利用的功能之一。 到目前为止,我们一直在孤立地工作,拥有一个独立的网站,没有外部依赖。 这是现代软件中令人难以置信的壮举。 大量维护不善的依赖项使得管理软件变得困难。 这并不意味着我们应该总是把我们的网站建成一个整体。 将我们的网站拆分成可以独立工作的模块有很大的好处。 然后,我们可以在多个站点中重用该主题。 短码、调试实用程序和某些类型的内容可以有自己的生命。

拥有少量依赖的愿望本身不应该是一个目标。 一些依赖项提供了如此多的东西,不使用它们将是愚蠢的。 如果我们编写与添加依赖项相同的代码,则可能会浪费精力。 我们的定制实用程序可能在功能和可维护性方面都有不足,而不是良好的架构和维护的外部库。 在自己做和导入第三方代码之间有一个权衡。 假设我们想要将代码拆分成多个模块,以便在多个网站上重复使用,或者对由其它人创建和管理的自定义代码具有外部依赖关系。 在这种情况下,Hugo提供了通过Hugo模块进行有效管理的方法。

Hugo模块已经被紧密地集成到Hugo中,所有Hugo功能都进行了调整,以便更好地与Hugo模块一起工作。 使用Hugo模块,我们可以更好地管理主题的版本。 我们可以将我们的短码移到多个网站上使用,或者我们可以选择一些由社区构建的短码放到我们的网站上。 我们可能需要许多网站上的一些内容,但是当需要更新时,跨项目的复制和粘贴就变成了一场噩梦。 尽管从逻辑上讲,Hugo创建了一个文件夹,其中包含模板代码中提供的设置网站所需的所有内容,但在物理上,这些文件可以跨Hugo组装的各种存储库重新发送,以供我们使用(参见图8.1)。

Figure8.1

图8.1在本章中,我们将代码分成Hugo使用的模块,以创建具有共置文件的逻辑结构,供模板代码使用。 相反,在物理上,该代码可能存在于独立的存储库中。

在本章中,我们将利用Hugo模块将主题导入我们的网站。 Hugo模块是Hugo网站(包括任何文件夹)的组成部分,可以作为可重用组件使用。 我们将把AcmeTheme移动到一个模块中,我们可以在多个网站上重复使用。 我们将添加通过未设置为Hugo模块的源动态加载CSS和JS文件的能力。 我们还将包括调试实用程序作为外部Hugo模块,并展示如何通过将我们的使用条款和隐私策略页面移至可以跨多个网站重用这些页面的基本内容的外部模块来外部化网站内容。 图8.2提供了本章结束时我们网站的结构。

Figure8.2

图8.2我们将在本章中设置的Acme Corporation网站的模块化结构。 Acme Corporation网站将包括多个模块:AcmeTheme/Eclectic/Universal 作为主题; Acmeceme和Acme公司网站之间共享的ShortCode和Partial; AcmeSupport是我们在本书中需要介绍的内容;带有调试栏的Hugo-DEBUG-Utils;以及TermsAndPrivacy模块,其中存在多个网站之间共享的内容文件。 请注意,该图并不包括所有文件,只是一个代表列表,以了解包含用于渲染的模块时使用的实际文件系统。