修复 hexo-algoliasearch 没有到找 db.json
在使用 hexo-algoliasearch 为 Hexo 添加搜索功能时出现了找不到 db.json 的报错
db.json 会在运行
hexo server
时生成,单独运行hexo algolia
就会出现这个问题
Issues: hexo-algoliasearch #173
1 | node:internal/process/promises:394 |
解决方案
我的解决方案是直接删除读取 db.json 的部分,经过与正常生成的索引对比发现,db.json 并没有影响生成结果
如果有误请大佬在评论区中指正
Q:那为什么不先运行 hexo server
时生成 db.json,非要单独运行 hexo algolia
呢?
A:在某些特殊场景,例如使用 Github Actions 部署博客时,不能运行 hexo server
开启服务,也不能先运行 hexo deploy
,以避免 hexo-deployer-git 触发 git 推送命令
这边有两种做法,推荐第一种
- 使用博主制作的修改版,已上传 npm
- 使用 js 生成 db.json 后再运行
hexo algolia
使用修改版
使用修改后的 hexo-algoliasearch ,直接使用 npm 安装即可
1 | npm install @msktmi/hexo-algoliasearch --save |
如果已安装 hexo-algoliasearch 记得卸载原版本
1 | npm uninstall hexo-algoliasearch --save |
具体修改内容可以查看提交记录
项目地址:https://github.com/MskTmi/hexo-algoliasearch
npm 地址:https://www.npmjs.com/package/@msktmi/hexo-algoliasearch
使用 js 生成 db.json
- 在项目根目录新一个
generate-db.js
文件1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42// 用于解决 https://github.com/LouisBarranqueiro/hexo-algoliasearch/issues/173
// 生成前运行 $ node generate-db.js
const Hexo = require('hexo');
const fs = require('fs');
// 忽略循环引用
function safeStringify(obj) {
const seen = new WeakSet();
return JSON.stringify(obj, (key, value) => {
if (typeof value === 'object' && value !== null) {
if (seen.has(value)) {
return;
}
seen.add(value);
}
return value;
}, 2);
}
async function generateDb() {
const hexo = new Hexo(process.cwd(), {});
try {
console.log('Initializing Hexo...');
await hexo.init(); // 初始化 Hexo
console.log('Loading data...');
await hexo.load(); // 加载 Hexo 数据
// 获取完整的 Hexo 数据
const data = hexo.locals.toObject();
// 使用 safeStringify 写入 db.json
const outputPath = './db.json';
fs.writeFileSync(outputPath, safeStringify(data));
console.log(`db.json has been generated at: ${outputPath}`);
} catch (err) {
console.error('Error generating db.json:', err);
process.exit(1);
}
}
generateDb(); - 使用终端运行 js 脚本生成 db.json
1
node generate-db.js
在 Github Actions 中使用
没有需求可忽略
1 | # 更新 Algolia 索引 |
效果
本文是原创文章,采用CC BY-NC-SA 4.0协议,完整转载请注明来自Mst
评论