Skip to content

构建自己的静态网站生成脚本(一)

最近接触了基于 Rust 的静态网站生成框架 zola,尝试之后,想用 js 实现一个简化版的静态构建脚本,加上我一直想用 Deno 写个 Demo,所以开始尝试使用 Deno 实现一个静态网站生成脚本。

Deno 的模块直接从 URL 引入,依赖比较多时,可以在一个文件中集中引入

js
export { a, b } from "https://bootcdn.com/xxx";

预想是编写一个基础的把文章进行模版化处理,并根据 src 下的目录结构 同步生成静态文件路由的脚本

Markdown to HTML 的转换

Marked在 NodeJS 和浏览器上都可以运行,尝试直接在 Deno 里引入 Marked 的 esm.min.js 文件 CDN 链接:

js
import { parse } from "https://cdn.jsdelivr.net/npm/marked/lib/marked.esm.min.js";

测试可以运行,本来 Deno 就是奔着和浏览器代码同构去的,这个结果本不需要惊讶,但还是足够让我开心,而且也就是说能在浏览器里运行的包,在 Deno 里都是可以正常运行的。

Deno 默认是有敏感权限控制系统的,每次跑代码都要不停的输入 y 来允许各种权限,我找到了官方的文档:https://deno.land/manual/getting_started/permissions

按照文档里的方法,在跑代码时候加上 --allow-all,结果没有变化,尝试了各种授权参数,没有任何变化,仍然需要输入很多次 y,在网上没有找到解决办法


注:那天我的启动命令中授权参数都是加在最后的,也就是说类似下面这样:

shell
deno run mod.js --allow-all

正确写法应该将授权参数加在 deno run 之后:

shell
deno run -A mod.js

我想快速实现一个 Demo,于是我先切换到了 NodeJS 来继续写,后续再加上 Deno 支持,Deno 提供了打包成独立可执行单文件的工具,所以 Deno 的实现一定会尝试。

Markdown 文章元信息的格式

zola 中文章元信息使用 Toml 格式:

Markdown
+++
title = "Le mouvement des Femmes Libres, à la tête de la libération kurde"
slug = "femmes-libres-libération-kurde"
+++

This is my article.

很优雅,但我习惯开启 VSCode 保存自动格式化代码的功能,VScode 没有识别出 markdown 中的 toml 内容,不会自动格式化内容,也没有高亮。

于是,我采用 markdown 的代码块语法,元信息格式使用 json:

Markdown
```json
{
  "title": "title",
  "datetime": 1655534892606,
  "description": "description",
  "image": "image"
}
```

This is my article.

这样算是有的比较好的码字体验了。

模版引擎的选择很重要,我打算自己尝试用 ES6 的模版字符串实现,内容偏多,另起一篇。

Release time: 6/19/2022, 1:08:00

Last updated:

⟣ Growing, with you. ⟢