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