主要参考的还是官方文档

Basic

暂时这里只讲 script 的开发,因为我需要的功能并不复杂,如果之后有更复杂的需求,会补充进来

首先,想要在 hexo 中添加一个脚本并不困难,只需要在博客根目录下创建一个 scripts 文件夹,然后把你的 js 脚本放进去就好。 然后只需要对封装的很好的 hexo 对象进行操作就行。

需求

站内链接

当我使用 markdown 语法也就是 []() 引用站内文章时,生成的静态网页并不会自动将它转换为正确的 url,所以我们需要手动解决。而 filter 完美的符合我的要求, 由于我想要修改渲染好的页面的数据,所以选择 after_post_render 再好不过, 文档中写到 data 会作为第一个参数传入每个过滤器,而你可以在过滤器中通过返回值改变下一个过滤器中的 data,如果什么都没有返回的话则会保持原本的 data, 所以接下来需要修改的就是 data.content 然后返回我们修改过的 data 就好。

hexo.extend.filter.register("after_post_render", (data) => {  
  const re = /_posts\/(.*).md/g;  
  
  data.content = data.content.replace(re, function (str1, str2) {  
      str2 = str2.replace(/\//g, "%2F")  
      return str2  
  })  
  return data  
});

上面就是我所做的事情,用正则 (md/regex.md)) 匹配出我要修改的内容,替换,然后返回一个 data,ok,事情解决了,之后每一次生成博客时,hexo 都会自动调用这段代码,用 markdown 语法链接站内文章的功能就实现了。

1.15 我发现了上面脚本的一个小 bug,问题出在正则表达式上,正确的应该写成下面这样

const re = /_posts\/(.*?).md/g;  

原本的表达式如果再一行里面有两个 markdown 链接,就会将两个都匹配进去,用 ? 选择非贪婪模式即可。