Keep 主题更新 tools 功能报错 btoa is not defined
Kiml Lv5
  • 前言
    不是专业前端,此问题通过 Chat GLM 解决

  • 更新

1
24-06-17 初始记录

问题

Keep 主题更新 tools 功能,但是访问 tools 模板页面报错:btoa is not defined。

原因

根据 Chat GLM 的描述。

如果你遇到了 btoa is not defined 的错误,这意味着 btoa 函数在你的环境中不可用。btoa 是浏览器环境中用于将字符串编码为 Base64 的函数,而在 Node.js 环境中没有这个全局函数。

在 Node.js 中,你可以使用 Buffer 类来实现相似的功能。下面是一个不使用 btoa 的替代方案,它可以在 Node.js 和浏览器环境中都工作。

解决

找到 node_module 中 keep 主题的安装位置:一般在这个地方(…/blog/node_modules/hexo-theme-keep/layout/_template)。在这个文件夹中的 tools-nav.ejs 为更新后的 tools 页面模板文件。

修改开始部分代码,注释第一行,改成使用 Buffer 转换的方式(这部分也是 Chat GLM 给出的建议):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<%  
// const btoaStr = (str) => btoa(encodeURIComponent(str)).trim().replaceAll('=', '')
const btoaStr = (str) => {
// 使用 Buffer 将字符串转换为 Base64 编码
const base64 = Buffer.from(str).toString('base64');

// 去除 Base64 编码字符串中的等号
const base64Url = base64.replace(/\+/g, '-').replace(/\//g, '_').replace(/=/g, '');

return base64Url;
};
const tools_data = theme.source_data.tools
const tools_nav_data = theme.source_data.tools.filter((t) => t?.category)
%>
 评论
评论插件加载失败
正在加载评论插件
由 Hexo 驱动 & 主题 Keep
访客数 访问量