在前端开发中,构建工具是必不可少的一部分。Metalsmith 是一个简单而灵活的静态网站生成器,它可以用于处理各种文件类型,并通过插件机制来扩展其功能。其中,metalsmith-permalinks 是一个常用的插件,可以为每个页面生成自定义链接。
安装
首先,在项目目录下使用以下命令安装 Metalsmith 和 metalsmith-permalinks:
npm install --save-dev metalsmith metalsmith-permalinks
使用
安装成功后,在项目根目录创建一个 metalsmith.js
文件,并添加如下配置:
-- -------------------- ---- ------- ----- ---------- - ---------------------- ----- ---------- - --------------------------------- --------------------- ---------------- -- ------ ----------------------- -- ------- ------------ -- --------- ----------------- -------- --------- --- -------------------- - -- ----- ----- ---- ------------------ ----------- ---
以上代码中,我们首先引入了 metalsmith
和 metalsmith-permalinks
两个模块,并创建了一个新的 metalsmith
实例。然后,我们设置了源文件夹和目标文件夹的路径,并设置了是否清空目标文件夹。最后,我们使用了 metalsmith-permalinks
插件,并传入一个对象,其中包含了自定义链接的格式。
在这个例子中,我们使用了 :title
作为链接格式,这意味着每个页面的 URL 将基于其文件名。例如,如果我们有一个名为 hello-world.md
的文件,它将生成一个链接 /hello-world.html
。
自定义链接格式
除了使用文件名作为链接格式之外,我们还可以使用其他元数据(metadata)或者日期作为格式。以下是一些常见的链接格式:
:title
:文件名:date
:文件创建日期,格式为YYYY-MM-DD
:year
:文件创建年份,格式为YYYY
:month
:文件创建月份,格式为MM
:day
:文件创建日期,格式为DD
:slug
:文件名的 slug 版本,即去掉了空格和标点符号的文件名:categories
:文件所属分类,多级之间使用/
分隔:tags
:文件所属标签,多个之间使用,
分隔
例如,我们可以将链接格式设置为 :categories/:slug/index.html
,这样每个页面的链接将基于其分类和 slug。如果一个页面的分类为 blog
,文件名为 my-first-post.md
,那么它将生成一个链接 /blog/my-first-post/index.html
。
示例代码
以下是一个示例项目,使用 Metalsmith 和 metalsmith-permalinks 构建静态网站:
-- -------------------- ---- ------- -------- --- ---- - --- -------- - --- ----- - - --- -------------- - - --- ---------------- - --- -------- --- ------ --- ------------- --- ------------
-- -------------------- ---- ------- -- ------------- ----- ---------- - ---------------------- ----- ---------- - --------------------------------- --------------------- ---------------- ----------------------- ------------ ----------------- -------- ------------------------------- --- -------------------- - -- ----- ----- ---- ------------------ ----------- ---
-- -------------------- ---- ------- -- ------------ - ------- ---------- ---------- - -------- ----- -------------- -- --------------- --- ------------------ - ------------- --------- ------- - ----------------------------------------------------------- -------- ----------------------------------------------------------------------------------