设置永久链接

  |  

摘要: 在 Hexo 中设置永久链接的踩坑过程

【对数据分析、人工智能、金融科技、风控服务感兴趣的同学,欢迎关注我哈,阅读更多原创文章】
我的网站:潮汐朝夕的生活实验室
我的公众号:潮汐朝夕
我的知乎:潮汐朝夕
我的github:FennelDumplings
我的leetcode:FennelDumplings


hexo 文章链接的默认生成规则是 年/月/日/文章标题 这样,一方面标题是中文的,放在连接中不太方便传播,另一方面文章标题是可能改的,这样以后如果标题有改动则引用这篇文章的其他文章中的链接就失效了。因此给每篇文章生成一个唯一 id 就是很实用的功能了,此后文章的引用,传播都用唯一 id 的链接非常方便,并且除非文章被删了,链接不会失效。

记录了踩坑过程,涉及到下面两个插件,最终方案见末尾第 5 小节

  • hexo-abbrlink
  • hexo-abbrlink2

$1 hexo-abbrlink

参考:Hexo设置永久链接

  • 安装插件
1
npm install hexo-abbrlink --save
  • 修改 _config.yml

找到 permalink 相关,原有内容:

1
permalink: :year/:month/:day/:title/

修改为:

1
2
3
4
permalink: posts/:abbrlink.html  # 此处可以自己设置,也可以直接使用 /:abbrlink  posts也可改也可以去掉
abbrlink:
alg: crc32 # 算法: crc16(default) and crc32
rep: hex # 进制: dec(default) and hex

原 md 文件的 Front-matter 内会增加 abbrlink 字段,值为生成的 ID 。这个字段确保了在修改了 Front-matter 内的博客标题 title 或创建日期 date 字段之后而不会改变链接地址。

之前为了满足公式渲染的某些需求,将 hexo-renderer-marked 改成了 hexo-renderer-kramed,而 hexo-renderer-kramedhexo-abbrlink 好像有点不兼容。因此考虑尝试下面的 hexo-abbrlink2


$2 hexo-abbrlink2

https://github.com/rozbo/hexo-abbrlink2

1
npm install hexo-abbrlink2 --save
1
2
3
4
5
6
7
Modify permalink in config.yml file:

permalink: posts/:abbrlink/
optional settings:

abbrlink:
start: 1000 # the first id, default 0

但是目前实测150篇文章只能生成8个id,所以还是换回了 hexo-abbrlink,但是如果不用与 hexo-abbrlink 不兼容的 hexo-renderer-kramed 的话,就得解决 hexo-renderer-marked 不支持公式的问题。

$3 hexo-renderer-pandoc

如果你选择使用 MathJax 进行数学公式渲染,你需要使用 hexo-renderer-pandoc 或者 hexo-renderer-kramed 这两个渲染器的其中一个。

1
2
npm uninstall hexo-renderer-kramed --save
npm install hexo-renderer-pandoc --save

配置

1
2
3
4
5
6
7
8
9
10
# Math Equations Render Support
math:
enable: true

# Default (true) will load mathjax / katex script on demand.
# That is it only render those page which has `mathjax: true` in Front Matter.
# If you set it to false, it will load mathjax / katex srcipt EVERY PAGE.
per_page: false

engine: mathjax

$4 修改 js 源代码

实践之后,第三小节的方案在 hexo g 时与第一小节的方案报同样的错,因此错不在 hexo-renderer-kramed 上,只好仔细看看报错信息

报错信息

追溯到源文件:node_modules/hexo-abbrlink/node_modules/hexo-fs/lib/fs.js,将引起报错的代码注释掉,看起来是个建立文件夹的操作。不知道这里建立文件夹的目的是什么,注释掉试一试。

修改 js 文件

修改之后继续 hexo clean && hexo g,成功了。

hexo g 完成后,每篇文章的头部增加了,attrlink 字段。

文章头部的 attrling 字段

目前看 hexo-abbrlinkhexo g 报错的问题是解决了,注释了一行带来的后遗症目前还不清楚,暂时先这么用着了。

$5 最终方案

hexo-renderer-marked 不变,安装 hexo-abbrlink,并按照第四小节的记录,注释掉报错信息中指示的 js 源文件中引起报错的行。按照第一小节修改 _confing.yml


Share