Basename 解析器

解析文件的 basename 以提取额外数据

当 Lume 扫描源文件夹时,它可以自动从文件(移除扩展名后的文件名)和文件夹的 basename 中提取一些信息。

例如,假设你想创建 order 变量来对菜单中的页面进行排序。一种显式声明此变量的方法是使用 [order]. 前缀保存页面:

.
├── 1.welcome.md
├── 2.introduction.md
├── 3.the-basics.md
└── 4.advanced.md

在文件系统中显式声明此变量的一个优点是,你可以在文本编辑器中看到源文件以与站点中相同的方式排序。

在 Lume 中,默认情况下文件名用于生成最终 URL(更多信息),因此上面的页面文件会生成以下 URL:

/1.welcome/
/2.introduction/
/3.the-basics/
/4.advanced/

这可能可以工作,但我们真正想要的是删除 order 前缀并将其存储在页面数据中。为此,我们可以在 _config.ts 文件中使用 site.parseBasename 函数注册一个 basename 解析器:

site.parseBasename((basename) => {
  // 用于检测 order 模式的正则表达式
  const match = basename.match(/(\d+)\.(.+)/);

  if (match) {
    const [, order, basename] = match;

    // 返回 order 值和不带前缀的新 basename
    return {
      order: parseInt(order),
      basename,
    };
  }
});

正如你所看到的,该函数很简单:它接收 basename,如果 basename 与正则表达式匹配,则返回一个包含已解析值的对象。请注意,返回的对象包含 basename 键,其值为原始 basename,但不包含前缀,这将用于生成最终 URL。

如果 basename 与正则表达式不匹配,则不返回任何内容,因此不会发生任何更改。

Note

basename 解析器返回的对象稍后将与页面数据(也称为 front matter)合并。Front matter 可以覆盖在 basename 解析器中定义的变量。

parseBasename 函数不仅用于文件,还用于文件夹。这允许从文件夹名称中提取值并将其存储为共享数据,以便它们可用于内部的所有页面。

提取日期

Lume 默认配置了一个 basename 解析器,用于从文件名中提取日期。有关更多信息,请参阅页面日期