0%

2020-01-06 解决hexo持久化链接中出现undefined的问题

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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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文件后再执行

1
2
npm i
npm run build

这样才是生成了可用的文件

同时注意到该项目的.gitignore文件中忽略了index.js,去掉即可。

1
2
3
git add .
git commit -m "修改了优先级"
git push

最后提交到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
版权声明:转载请注明出处!

坚持原创技术分享,您的支持将鼓励我继续创作!