其他页面格式

使用 Vento、JavaScript 和其他格式创建页面

我们已经了解了如何在 Lume 中使用 Markdown 文件创建页面。对于博客或文档等基于文本的站点,这是一种便捷的方式。但是,您可能希望创建包含少量文本、图像、视频、动画等元素的复杂页面。每个页面都有自己的格式。

使用 Vento 创建页面

Vento,即我们在之前的示例中用于创建布局的格式,也可以直接用于创建页面。您只需创建一个扩展名为 .vto 的文件即可。例如:

---
title: 欢迎来到我的页面
layout: layout.vto
links:
  - text: 我的 Twitter
    url: https://twitter.com/misteroom
  - text: 我的 GitHub 个人资料
    url: https://github.com/oscarotero
---

<article>
  <header>
    <h1>{{ title }}</h1>
  </header>

  <ul>
    {{ for link of links }}
    <li>
      <a href="{{ link.url }}">
        {{ link.text }}
      </a>
    </li>
    {{ /for }}
  </ul>
</article>

这是一个使用 Vento 创建页面的示例。与 Markdown 类似,它可以包含 front matter 来存储页面数据,这些数据用于渲染 Vento 代码。请注意,它具有 layout 变量,因此渲染此页面的结果将传递给布局,并存储在 content 变量中(以及其他变量 titlelinks)。

使用 JavaScript 创建页面

对于需要一些渲染前逻辑的复杂页面,JavaScript 非常有用。您必须创建一个扩展名为 .page.js 的文件。.page 子扩展名是必需的,用于区分生成静态页面的 JavaScript 文件和用于在浏览器中执行的其他 JavaScript 文件。

前面 Vento 示例的 JavaScript 版本如下:

export const title = "欢迎来到我的页面";
export const layout = "layout.vto";
export const links = [
  {
    text: "我的 Twitter",
    url: "https://twitter.com/misteroom",
  },
  {
    text: "我的 GitHub 个人资料",
    url: "https://github.com/oscarotero",
  },
];

export default function ({ title, links }) {
  return `
  <article>
    <header>
      <h1>${title}</h1>
    </header>

    <ul>
      ${
    links.map((link) => `<li><a href="${link.url}">${link.text}</a></li>`).join(
      "",
    )
  }
    </ul>
  </article>`;
}

如您所见,Vento 示例中 front matter 中导出的变量现在作为命名的 ES 模块导出。

默认导出是一个返回页面内容的函数。第一个参数包含此页面的所有可用数据(不仅是页面导出的相同变量,还包括 _data 文件提供的其他数据)。

更多格式

Lume 支持多种格式来生成页面。 访问插件部分 以查看有关所有可用格式的更多信息。其中一些是默认安装的(例如 VentoYAMLModules 等),另一些则需要在您的 _config.ts 文件中安装(例如 NunjucksEtaJSXLiquidPug)。

数据模型

如果您想更好地了解 Lume 如何加载页面,请访问 数据模型 页面。