2020-01-06 解决 hexo 持久化链接中出现 undefined 的问题
在此之前,先说明下用到的两个插件和作用。
hexo-abbrlink用于持久化链接,将原本 年/月/日/标题 的链接转换为 hash 路由,这样路由层级减少,有利于 SEO。
hexo-addlink这个插件的用途是在底部添加一个版权声明,会添加本文的地址。
之前的时候,如果只编译一次的话,虽然成功生成了 hash 路由,但是底部的版权声明中的地址总是 undefined,百思不得其解。
最后查看源码时发现 hexo-addlink 这个插件没有定义优先级,因此默认为 10;而 hexo-abbrlink 这个插件定义的优先级为 15,按 hexo 的规则是数字越大越晚执行,因此 hexo-abbrlink 在 hexo-addlink 后执行。所以,既然没有生产 hash 路由,那么自然是 undefined。
明白了问题所在,那么就是解决问题了
实际上只要修改两个插件中的一个的优先级就行了,让 hexo-abbrlink 比 hexo-addlink 先执行。在这里我们以修改 hexo-addlink 为例。
由于年代久远,因此让原作者修改源码是基本上不可能的事情。好在这是一个开源项目,上 GitHub 上 fork 一份,下载到本地,修改优先级为 20。
即
1 | const hexo = hexo || {}; |
注意:本项目还需要编译后才能使用
按照 package.json 中的提示,我们修改完 main.js 文件后再执行
1 | npm i |
这样才是生成了可用的文件
同时注意到该项目的.gitignore 文件中忽略了 index.js,去掉即可。
1 | git add . |
最后提交到 GitHub 上。
再回到自己的 hexo 项目中,修改 package.json 中 hexo-addlink 的源地址为从 GitHub 下载
即
1 | "hexo-addlink": "git+https://github.com/CaoMeiYouRen/hexo-addlink.git" |
完工,现在再执行
1 | hexo clean && hexo g |
现在应该在版权声明中也能看到 hash 路由了
如果没有生效那么可能是 node_modules 的问题,删除后重新下载依赖即可
本文作者:草梅友仁
本文地址: https://blog.cmyr.ltd/archives/d90e02c6.html
版权声明:转载请注明出处!