使用资源

Lume 如何处理诸如 CSS、JavaScript 或图像文件之类的资源。

在之前的步骤中,我们学习了如何使用 Lume 创建 HTML 页面,这包括创建文件(格式如 Markdown、Vento、JavaScript、YAML 等)并使用布局来添加剩余的 HTML 代码。

然而,网站包含的文件不仅仅是 HTML 页面。我们需要 CSS 来进行样式设计,JavaScript 来实现交互,以及图像、视频等。这些文件被称为“资源 (assets)”,Lume 有两种方法来处理它们。让我们从最简单的一种开始:复制它们。

复制资源

假设我们想为我们的网站应用一些样式。创建文件 /styles.css 并添加一些 CSS 代码:

body {
  font-family: system-ui;
  max-width: 40em;
  margin: 2em auto;
}

现在我们需要在所有页面中导入这个 CSS 文件。幸运的是,我们在所有页面上都使用了相同的布局,所以我们只需要编辑布局文件,包含一个指向我们的 styles.css 文件的 <link rel="stylesheet"> 元素:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <title>{{ title }}</title>
    <link rel="stylesheet" href="/styles.css" />
  </head>
  <body>
    {{ content }}
  </body>
</html>

现在,所有页面都有了 <link> 元素,但是样式并没有被应用。如果你检查 _site 文件夹,你不会在那里看到 styles.css 文件,并且 URL http://localhost:3000/styles.css 返回 404 错误。

这是因为 Lume 默认情况下只从已知扩展名的文件(如 .md.vto 等)生成 HTML 页面。其他文件会被忽略。所以我们需要配置 Lume 以包含所需的额外文件。

Lume 配置在 _config.ts 文件中定义。当创建一个新的 Lume 项目时,这个文件非常基础,它唯一做的事情是导入 Lume,创建一个 site 实例,并导出该实例:

import lume from "lume/mod.ts";

const site = lume();

export default site;

site 变量是负责构建我们站点的 Lume 实例。它包含几个函数来配置我们站点的构建方式,其中一个函数是 copy(),它允许我们定义想要复制的文件。

import lume from "lume/mod.ts";

const site = lume();

site.copy("/styles.css");

export default site;

现在你应该在 _site 文件夹中看到 styles.css 文件,并且样式已应用于所有 HTML 页面。

Tip

copy() 函数非常强大,它允许你按名称或扩展名复制文件,复制文件夹,更改输出名称等等。请参阅 copy 文档 以了解更多信息。