Hugo

Hugo 是最流行的开源静态网站生成器之一。凭借其惊人的速度和灵活性,Hugo 让构建网站再次变得有趣。

PurgeCSS 可通过 Hugo Pipes 资产处理与 Hugo在新窗口中打开 一起使用。

工具

  1. 安装 Hugo在新窗口中打开
  2. 安装 Node.js在新窗口中打开

编写统计信息

config.toml 文件中,添加以下内容

[build]
  writeStats = true

或者,如果使用 config.yaml 文件,则添加以下内容

build:
  writeStats: true

这告诉 Hugo 将一个 hugo_stats.json 文件作为构建的一部分写入项目根目录。它包含所有来自 *.html 模板的标签、类和 ID。

Node 包

如果项目根目录中的 package.json 文件还不存在(它跟踪所有 node 依赖项),请从项目根目录运行此命令以创建它

npm init

你可以输入任意多或少的信息。创建文件后,你可以继续安装包。

从项目根目录运行此命令以安装必要的包

npm install postcss postcss-cli @fullhuman/postcss-purgecss --save

这些包将安装到一个名为 node_modules 的文件夹中,并添加到你的 package.json 文件中。

如果还没有,请将 node_modules/ 添加到你的 .gitignore 文件中。

PostCSS 配置文件

在项目根目录创建一个 postcss.config.js 文件,其内容如下

const purgecss = require("@fullhuman/postcss-purgecss")({
  content: ["./hugo_stats.json"],
  defaultExtractor: (content) => {
    const els = JSON.parse(content).htmlElements;
    return [...(els.tags || []), ...(els.classes || []), ...(els.ids || [])];
  },
  safelist: [],
});

module.exports = {
  plugins: [
    ...(process.env.HUGO_ENVIRONMENT === "production" ? [purgecss] : []),
  ],
};

有关每个选项的详细信息,请参阅 PurgeCSS 配置文档

注意: safelist 是一个空数组(目前)。请记住,仅提取 HTML 模板中的元素。因此,如果你的 JS 添加了元素,则需要将它们列入安全列表。

HTML 模板

<head> 的 HTML 模板中,添加以下内容

{{ $css := resources.Get "css/style.css" | resources.PostCSS }} 
{{ if hugo.IsProduction }} 
    {{ $css = $css | minify | fingerprint | resources.PostProcess }} 
{{ end }}

<link
  rel="stylesheet"
  href="{{ $css.RelPermalink }}"
  {{ if hugo.IsProduction -}} 
    integrity="{{ $css.Data.Integrity }}"
  {{- end }}
/>

这假设

  • 你的 CSS 文件位于 assets/css/style.css
  • 你希望缩小并对该文件的生产版本进行指纹识别

如果这些假设不适用于你,请相应地修改代码。

使用它

太棒了,现在我们可以使用它了。

以开发模式提供你的网站,这是默认设置

hugo serve

打开浏览器的 DevTools,转到 Network 选项卡,然后记下 CSS 文件的大小。

现在,按 Control + C 停止它,然后以生产模式提供你的网站

hugo serve --environment production

请注意,CSS 文件现在的大小小得多

环境

如果你不想传递 --environment production 选项,则可以设置此环境变量

HUGO_ENVIRONMENT=production

参考资料