在Cloudflare Workers里使用markdown-it渲染markdown,并插入HTML中

因为对Cloudflare Workers感兴趣,因此想尝试一下在Workers中渲染Markdown,看看是否对SEO有所帮助。

使用Wrangler

wrangler是本地开发Cloudflare workers的工具

# 安装wrangler
npm install -g wrangler

# 登录wrangler,在打开的网页中点击授权。
wrangler login

# 创建目录并从已有Worker获取代码
wrangler init --from-dash 你的Worker名

Cloudflare Workers文档中有详细的说明。

本地运行Cloudflare Workers

本地运行Workers只需以下命令

npm run dev

会启动一个开发服务器,体验和在线编辑类似。

如果要修改Workers环境变量,请修改 wrangler.toml的[var] 条目。如果要覆盖变量,可以创建 .dev.vars文件,并写上想要修改的变量

举例说明

wrangler.toml

[vars]
name = "your-worker"
route = "example.com"

更多示例请看Cloudflare Workers文档

使用markdown-it

安装markdown-it包,就像安装其他npm包一样。

npm install markdown-it

在需要使用的文件里加上

import MarkdownIt from "markdown-it";

将Markdown渲染为html代码

const md = new MarkdownIt();
const result = md.render(string)

替换SPA的html

首先打开浏览器,打开开发人员工具。然后在网页任意位置右键点击,选择查看页面源代码。

观察到代码如下所示

<!DOCTYPE html>
<html>
  <head>
    <script type="module" src="/@vite/client"></script>

    <title>MakkaPakka Page</title>
<!-- meta, link etc...-->
    
  </head>
  <body>
    <div id="q-app"></div><script type="module" src="/.quasar/client-entry.js?t=187075245369"></script>
  </body>
</html>

我需要替换标头,并在body中插入渲染好的html。

因此编写了两个正则表达式。

const r1 = /<title>[\s\S]*<\/title>/
const r2 = /<body>/

替换我们的网页。

let html=source.replace(r1,`<title>${art.title} - MakkaPakka Page</title>`);
html=html.replace(r2,`
<body>
<div id="prerendertext">
<h1>${art.title}</h1>
<time>${art.createTime}</time>
<div>
${result}
</div></div>`);
return html;

结论

至于这个方法是否有助于SEO有待观察。网页加载好之后需要使用JS将先前插入的html移除,否则可能导致一些问题。这种方法也可以用来为禁用Javascript的浏览器提供可读网页。