在此之前,先说明下用到的两个插件和作用。
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。
即
const hexo = hexo || {};
const config = hexo.config;
const addlink = hexo.config.addlink;
hexo.extend.filter.register('before_post_render', data => {
if (!addlink || !config.url || data.layout !== 'post') {
return data;
}
let domain = config.url;
let beforeText = addlink.before_text || '';
let afterText = addlink.after_text || '';
let layout = data.layout;
let href = `${domain}/${data.path}`;
let hrefText = `${beforeText} [${href}](${href}) ${afterText}`;
data.content += `\n\n${hrefText}`;
},20);//这里添加优先级选项
注意:本项目还需要编译后才能使用
按照 package.json 中的提示,我们修改完 main.js 文件后再执行
npm i
npm run build
这样才是生成了可用的文件
同时注意到该项目的.gitignore 文件中忽略了 index.js,去掉即可。
git add .
git commit -m "修改了优先级"
git push
最后提交到 GitHub 上。
再回到自己的 hexo 项目中,修改 package.json 中 hexo-addlink 的源地址为从 GitHub 下载
即
"hexo-addlink": "git+https://github.com/CaoMeiYouRen/hexo-addlink.git"
完工,现在再执行
hexo clean && hexo g
现在应该在版权声明中也能看到 hash 路由了
如果没有生效那么可能是 node_modules 的问题,删除后重新下载依赖即可
- 本文链接: https://wp.cmyr.ltd/archives/resolve-the-issue-of-undefined-in-hexo-persistent-links
- 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
欢迎关注我的其它发布渠道
发表回复
要发表评论,您必须先登录。