可能是最省流量的 Hexo 站内搜索插件

首先

插件链接先亮一下,
https://github.com/SuperKieran/hexo-generator-search-zip
走过路过,不要错过,赏个 Star,给个面子

由来

有人可能会问,hexo 的站内搜索插件不是很多吗,干嘛多此一举,又写一个,你这个有什么特别的吗?
嘿!问得好!
待我细细道来,
每一件事情的出现肯定是有原因滴,
每一个插件的出现肯定也是有原因滴。
很简单了,我的需求现在的插件无法满足而已。

需求

我的需求很简单,不依赖第三方服务,比如 algolia,也不需要自己的服务器跑 api,有自己的服务器跑 api 我还要静态博客干啥子?简直高射炮打蚊子。我只想要简单的把所有文章数据存成 json 文件,然后打包成 zip,前端把 zip 下载下来,解压存入 LocalStorage,以便下次复用。
这么简单的需求,可惜大家只是 简单的把所有文章数据存成 json 文件,没有考虑后续的优化。
所以只能我自己动手了,先找了个已有的插件 hexo-generator-search,这个就是只做了第一步的,把它精简了下,增加了打包成 zip 功能,还生成了时间戳,前端可以根据时间戳来判断 zip 包有没有更新,没有更新就可以继续复用 LocalStorage 里的数据而不用下载了,可谓是省时省流量~~

核心代码其实就一点点
在原来生成的 json 对象基础上,加了如下代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
var json = JSON.stringify(res);

fs.stat(this.public_dir, (err, exist) => {
if (err || !exist.isDirectory) {
fs.mkdirSync(this.public_dir)
};

var output = fs.createWriteStream(this.public_dir + searchConfig.zipPath);
var archive = archiver('zip', {
zlib: { level: 9 } // Sets the compression level.
});
archive.on('error', function(err) {
throw err;
});

archive.pipe(output);
archive.append(json, { name: searchConfig.path });
archive.finalize();
})

return {
path: searchConfig.versionPath,
data: +new Date() + ''
};

最后生成的搜索文件可以看我博客的
https://go.kieran.top/search.zip
https://go.kieran.top/searchVersion.txt

如何安装?

至于安装也很简单了,

1
$ npm install hexo-generator-search-zip --save

Duang 装好了
然后在博客的 _config.yml 文件里,注意是根目录那个,不是主题里的那个,加个配置就好了

1
2
3
4
5
search:
path: search.json
zipPath: search.zip
versionPath: searchVersion.txt
field: post

field 可以选 page 和 all

结束了吗?
如果你用的是我写的 TKL(https://github.com/SuperKieran/TKL) 主题,
那么把主题里面的 _config.yml 找下面改一下就可以了

1
2
3
local_search:
enable: false
...

如果是别的主题的话…Emmmm,那主题的前端搜索实现需要你自己动手了。

简单点的话,就去我的主题里挖代码,https://github.com/SuperKieran/TKL/blob/master/layout/_partial/search.ejs
可能得稍微改改,怎么改,就看你咯~~

Tips

1
2
3
4
5
search:
path: search.json
zipPath: search.flv
versionPath: searchVersion.txt
field: post

search.zip 下载有些用户会唤起迅雷下载(如果有设置了迅雷的用户),改成 .flv 后缀就不会了。