110静态站点生成器的简要介绍

来自菜鸟教程
跳转至:导航、​搜索

静态站点生成器现在非常 à la 模式 ,并且随着 JAMStack 成为当今许多 Web 项目的可行替代方案,这不足为奇!

无论是否是 JAMStack,静态站点生成器 (SSG) 与更传统的 CMS 相比具有一些主要优势,而对于 SSG,有 有很多选项可供选择 。 杰基尔、雨果、盖茨比、Next.jst、萨珀……哦,天哪!

我最近四处逛逛,看看我的一个名为 Spiral11 的项目的最佳静态站点生成器选项是什么。 我最初倾向于 Gatsby,因为它包含了一些现代的好东西,比如图像优化,但后来我进一步看了 Eleventy 并爱上了它。

11ty 易于使用,不会妨碍您并准确地吐出您输入的内容,因此不会出现意外或隐藏的代码膨胀。 在最基本的情况下,11ty 只是将它从您的工作目录中找到的文件编译成静态 HTML 文件。 另外,由于它是用 JavaScript 编写的,因此您可以根据可以在项目中使用的包访问整个 npm

让我们参观一下,看看它是如何工作的……

十一站点设置

首先使用 npm 或 Yarn 在你的机器上全局安装 Eleventy:

# with npm
$ npm install -g @11ty/eleventy

# with Yarn
$ yarn global add @11ty/eleventy

现在您可以在任何包含有效模板文件的目录中运行 eleventy 命令。

例如,假设我们有一个名为 best-site-ever 的目录,其中包含一个 index.md 文件:

索引.md

## Chomp Chomp **Chomp** 🐊🐊🐊

您现在可以在该目录中运行 eleventy,您会看到 Eleventy 创建了一个 _site 目录,其中包含一个 index.html 文件,其中包含我们期望的内容:

_site/index.html

<h2>Chomp Chomp <strong>Chomp</strong> 🐊🐊🐊</h2>

说到模板语言,您有很多选择。 你可以使用 Markdown、Nunjucks、Liquid、Mustache……你可以混合搭配,所以你可以有一些用 Liquid 编写的文件,一些用 Nunjucks 和 Eleventy 处理一切都很好。

十一个命令选项

eleventy 命令也接受一些有用的标志。 例如:

  • –watch:当您的任何项目文件更改时重写输出文件。
  • –serve:通过本地 Web 服务器服务输出的站点并观察变化。
  • –dryrun:测试处理过程,不实际输出任何文件。
  • –输出:指定不同的输出位置。

这意味着很多时候,在本地工作时,您需要使用以下命令服务和重建更改:

$ eleventy --serve

目录结构

使用 Eleventy,您不仅可以自由选择自己喜欢的模板语言,还可以选择自己的目录结构。

假设我们的项目中有另一个 markdown 文件,但这次它位于两个嵌套的子目录中:

/一/二/blog-post.md

One day *I will write* my 1st blog post!

现在如果我们运行 eleventy_site 中的输出将如下所示:

📁 _site/
  index.html
  📁 one/
    📁 two/
      📁 blog-post/
        index.html

因此,您会注意到目录结构被保留,文件名用作 slug/URI,并且 Eleventy 为每个输出模板创建一个目录,其中包含一个包含 HTML 输出的 index.html 文件。

如果我们希望将文件组织在最终输出中反映不同的目录中怎么办? 很简单,我们只需在顶部的前端部分中指定特定模板的永久链接即可。

/一/二/blog-post.md

---
permalink: '/blog-post/'
---

One day *I will write* my 1st blog post!

只需再次运行 eleventy,您现在就会看到 blog-post 出现在 _site 的根级别。 这样,指定永久链接可以让您充分灵活。

前台事项

说到前端,您可以将各种元数据放入其中,然后可用于布局(稍后会详细介绍)。 例如,在前面的问题中,您将指定帖子的标题、元描述/摘录和标签等内容,并且大多数键可以随意命名。

这里有一个例子来说明:

/一/二/blog-post.md

---
title: "My first blog post 😊"
date: 2020-04-02
excerpt: "This post talks about how one day I'll write a 1st post."
permalink: '/blog-post/'
emotion: happy
tags:
  - blog
  - getting-started
---

One day *I will write* my 1st blog post!

收藏品

在这里我不会深入讨论这个话题,我邀请您阅读文档以了解更多信息,但是 Eleventy 使用您在前面提供的标签来填充集合,可以迭代在其他模板中,例如类别页面。

还有一个名为 all 的特殊集合,默认情况下包含每个帖子。 使用 all 集合,您最终可能会得到类似站点地图的内容,其中包含您不想要的帖子/页面,因此有一种简单的方法可以选择不将帖子或页面包含在集合中:

---
eleventyExcludeFromCollections: true
---

布局

到目前为止,我们所做的只是从我们创建的 markdown 文件中输出 HTML。 大多数情况下,此类 Markdown 文件应包含在布局中,以提供样板 HTML、页眉、导航栏、侧边栏和页脚等内容。

默认情况下,布局模板应位于 _includes 目录中。

让我们使用 Nunjucks 语法创建一些示例布局。 一种是我们的 HTML 样板的默认布局,另一种是我们的博客布局:

_includes/default.njk

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>{{ title }} | My Site</title>
</head>
<body>
   {{ content | safe }}
</body>
</html>

_includes/blog.njk

---
layout: default
---

<h1>{{ title }}</h1>
<div>
  Published on {{ date }}
</div>

<article>
  {{ content | safe }}
</article>

如您所见,一个布局可以调用另一个布局,并且我们的布局可以访问我们常规模板文件中最前面的数据。

我们可以通过在任何内容模板的前面指定布局来使用布局:

---
layout: blog.njk
title: "My first blog post 😊"
date: 2020-04-02
excerpt: "This post talks about how one day I'll write a 1st post."
---

One day *I will write* my 1st blog post!

十一配置

到目前为止,我们已经完成了所有工作,甚至没有触及配置文件,它展示了使用 Eleventy 的简单性。 但是随着您的网站变得越来越复杂,您肯定希望能够设置一些配置选项。 您可以在项目根目录的 .eleventy.js 文件中执行此操作。

这是一个示例配置文件,它将我们的静态资产复制到输出目录并指定不同的输出目录名称(public):

.eleventy.js

module.exports = eleventyConfig => {
  // Copy our static assets to the output folder
  eleventyConfig.addPassthroughCopy('css');
  eleventyConfig.addPassthroughCopy('js');
  eleventyConfig.addPassthroughCopy('images');

  // Returning something from the configuration function is optional
  return {
    dir: {
      output: 'public'
    }
  };
};

您可以在配置文件中执行各种操作,例如缩小 HTML 输出、使用插件和配置简码。 再次,我邀请您 查看文档 以了解有关可以配置的更多信息。 但是,如果您一开始感到不知所措,请记住,默认情况下 Eleventy 甚至不需要配置文件,并且可以在没有配置文件的情况下完成大部分繁重的工作。

使用启动器

到目前为止,我们一直在从头开始创建一个站点以了解它是如何工作的,但是您通常希望从一个已经以您喜欢的方式配置和/或样式的良好基础开始。 您可以在此处 浏览 11 个启动器的 列表。

我个人非常喜欢 Skeleventy starter,它使用 Tailwind CSS 进行样式设置,并配置了 PurgeCSS 以摆脱生产中未使用的样式。 如果您正在创建博客,官方的 Eleventy 博客启动器 也是一个不错的起点。

了解更多

✨✨ 简短的介绍就到此为止,但我邀请您通过查看以下资源了解更多信息: