0%

郁闷的一天

小记

今天回来没什么事,在地铁上一直在想,到底什么样才算一名真正的程序员。我算吗,在我看来我并不算,或者说还有很长一段路要走。带着这一份复杂的心情,打开电脑,看着我刚弄好的博客网站,想着还能加点什么。于是去看了看别人的博客网站,翻来翻去,着实不知道从哪里下手。正准备去 google 一下博客网站基础建设之类的词条,忽然想起网站上正缺一个像这样的搜索栏。可是…我的小网站又能搜些什么呢。博客内容少的可怜,就连按钮也少的可怜,可是以后呢,万一以后多起来了呢,以后的事谁说的准呢…

搜索栏

我对着文件目录正看反看,到底该怎么加呢,难不成要自己写样式和搜索交互逻辑。正头疼之际,问了问AI,AI查询目录之后告诉我,在 /next/_config.yml中已经写好了两种搜索逻辑。一种是 Local Search,另一种是 Algolia Search。我翻看了下文档,发现实现起来相当简单。

本地搜索这种方式实现的逻辑是,Hexo 会在你运行 Hexo g 生成静态资源时,基于你当前目录的内容生成一个 search.xml 文件。然后当你在网页搜索关键词的时候会自动从这个资源文件里面检索。因为所有资源都是静态资源,所以检索速度特别快,但是当网站博客内容特别多的时候,网页加载速度会明显变慢。
首先是安装这个插件,安装完成之后,在 _config.yml 里添加配置。
npm install hexo-generator-searchdb --save /这是安装资源

1
2
3
4
5
6
{ 
search:
path: search.xml
field: post # 也可以改成 page 或 all
content: true
}

这种配置我实际使用之后发现非常鸡肋,你搜索之后结果什么时候出来完全取决于你的网速。但好处是,所有搜索资源文件保存在云端不占用网页资源,就算博客再多也不会影响网页的加载速度。但是我仍然不推荐这个,因为真的很慢…。但是我既然配置过了,还是记录一下。
首先你要去他的官网去注册一个账号,得到你的各种 API KEY 配置。由于博主真的很讨厌它,所以注册细节我就不赘述了。下一步是安装插件,安装完成之后还要和本地配置一样去 _config.yml 里添加配置。
npm install hexo-algolia --save

1
2
3
4
5
6
7
8
9
10
11
12
{
search:
path: search.xml
field: post
content: true

algolia:
applicationID: YOUR_APP_ID
apiKey: YOUR_ADMIN_API_KEY
indexName: YOUR_INDEX_NAME
chunkSize: 5000
}

配置好你的这些七七八八的key之后呢,你就会发现一个问题。那就是你的key完全是暴露在空气中的,任何人都能在你的仓库里看到你的key。由于博主也是网站小白从来没有遇到过这样的问题,所以也是搜索了许久,找到一个叫 .env 文件的解决办法。这是一个存放环境变量的文本文件,而环境变量都是全局参数。接着你把 .env文件在 .gitignore 里应用一下,之后你把代码推上去之后,你的key文件就是隐藏的。后续只需要写一段js代码让 Hexo 启动的时候把 Key 帮你填上就行了。

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
{
const {
ALGOLIA_APP_ID,
ALGOLIA_INDEX_NAME,
ALGOLIA_API_KEY,
ALGOLIA_SEARCH_KEY,
ALGOLIA_ADMIN_API_KEY,
HEXO_ALGOLIA_INDEXING_KEY
} = process.env;

const searchKey = ALGOLIA_API_KEY || ALGOLIA_SEARCH_KEY;
const adminKey = ALGOLIA_ADMIN_API_KEY || HEXO_ALGOLIA_INDEXING_KEY;

if (ALGOLIA_APP_ID || ALGOLIA_INDEX_NAME || searchKey || adminKey) {
hexo.config.algolia = hexo.config.algolia || {};
if (ALGOLIA_APP_ID) {
hexo.config.algolia.applicationID = ALGOLIA_APP_ID;
hexo.config.algolia.appId = ALGOLIA_APP_ID;
}
if (ALGOLIA_INDEX_NAME) hexo.config.algolia.indexName = ALGOLIA_INDEX_NAME;
if (searchKey) hexo.config.algolia.apiKey = searchKey;
if (adminKey) hexo.config.algolia.adminApiKey = adminKey;
}

if (!process.env.ALGOLIA_API_KEY && ALGOLIA_SEARCH_KEY) {
process.env.ALGOLIA_API_KEY = ALGOLIA_SEARCH_KEY;
}
if (!process.env.ALGOLIA_ADMIN_API_KEY && HEXO_ALGOLIA_INDEXING_KEY) {
process.env.ALGOLIA_ADMIN_API_KEY = HEXO_ALGOLIA_INDEXING_KEY;
}
}

这一段代码是为了能让 Hexo 启动的时候自动把 _config.yml里的 Key 配置给填上。
只能说整个过程真是漫长而又折磨😩,所以听我一句劝,就用本地吧。

时间也不早了,最后,感谢你能耐心看完。或许这些老到掉牙的知识并不会为你带来乐趣,但是我还是希望,你在看完之后能留下些许印象,多年以后能记起你在一个很平常的晚上,看到了一篇非常无聊但有浓厚的生活气息的博客。这样就够了。
希望你今天的生活变得更美好了一点,希望你能每天都开心!下次见!


评论