使用 Markdown、shell 和 pandoc 生成静态站点和 Atom feed。
git clone pdssg,最好在您的站点源目录旁边。
git clone https://github.com/torresjrjr/pdssg
要运行 pdssg 并构建静态站点,请在站点源目录上方的一个目录中执行 pdssg 脚本。
$ ls
src/ pdssg/
$ ./pdssg/pdssg
pdssg 是单个可执行 shell 脚本,没有命令行标志。它只是从现有的相邻目录src/
(源)和站点内容(要转换为 HTML 网页的 Markdown 文件和其他文件)生成相邻站点目录dst/
(目标)。
pdssg 的设计是模块化和基于树的。这是一个示例站点源目录。
src/
|-- _ignore
|-- _feeds
|-- index.md
|-- about.md
|-- posts.md
|-- posts/
| |-- _drafts/
| | `--- 2020-04-01-bored.md
| |-- 2020-01-01-new-year.md
| |-- 2020-02-01-corona-what.md
| `-- 2020-03-01-stuck-at-home.md
|-- feeds/
| `-- posts.md
|-- assets/
| `-- style.css
|-- _templates/
| |-- atom.xml
| `-- main.html
`-- _includes/
|-- header.html
|-- footer.html
`-- meta.html
这是生成的构建目录。
dst/
|-- index.html
|-- about.html
|-- posts.html
|-- posts/
| |--- 2020-01-01-new-year.html
| |--- 2020-02-01-corona-what.html
| `--- 2020-03-01-stuck-at-home.html
|-- feeds/
| `--- posts.html
`-- assets/
`--- style.css
注意:以下划线_
开头的文件和目录将被丢弃。
Markdown 文件将转换为 HTML 文件,准备好作为网页。例外情况是与./_ignore
文件中的模式匹配的文件路径,例如.gitignore
文件。
pdssg 期望 Markdown 文件有一个 YAML frontmatter 块,它是由一对---
包围的 YAML 元数据块,位于文件内容的其余部分之前。
frontmatter 至少应该有一个title
值,它将用于制作<h1>
标题。 author
和date
值很常见,并在适当时推荐。
Markdown 文件示例:
---
title : My Webpage Title
author : John Smith
date : 2020-12-30
---
## Subheading
contents...
如示例中所示, _includes
和_templates
目录将用于生成 HTML 和 Atom 文件。然后它们被丢弃。
对于_templates
中的文件:
atom.xml
用于制作 HTML 文档。main.html
用于制作 Atom feed。对于_includes
中的文件:
meta.html
插入到文档标题的<meta>
标记内。header.html
插入正文中的<body>
标记内,位于主要内容之前。footer.html
插入正文中的<body>
标记内,位于主要内容之后。Atom 提要是类似 RSS 的提要,基于更新、更强大的聚合格式。它们本质上就像 RSS 一样使用和引用。 Atom feed 允许读者订阅网站的新内容,例如博客。
pdssg 可以从目录创建 Atom feed,并将目录的文件作为 feed 条目。为此,您需要为您的提要创建一个指定的目录,并创建一个“Atom 种子文件”,如下所示:
./feeds/
)并将其路径写入配置文件_feeds
./posts/
)。./feeds/posts/
)。.md
文件扩展名附加到路径(例如./feeds/posts.md
)。请参阅上面的示例站点进行演示( posts/
目录)。
Atom 种子文件将转换为 Atom feed 文件。生成的提要将存在于新路径中,但扩展名为.xml
而不是.md
。在此示例中,原子提要将出现在example.com/feeds/posts.xml
中。请注意, ./posts.md
文件对于提要来说不是必需的,而只是一个目录。
注意: Atom 条目按其相应文件名的字母数字顺序排序,而不是按其 YAML frontmatter 指定的date
排序。
这个项目是出于我自己网站的个人挑战而诞生的。应一位友好博主的要求,我将其清理并公开。
联系我:t.me/torresjrjr