FATAL Something's wrong. Maybe you can find the solution here: https://hexo.io/docs/troubleshooting.html TypeError: code.split is not a function Please report this to https://github.com/markedjs/marked. at codeToThemedTokens (C:\PEN_Testing\environment\new_blog\node_modules\shiki\dist\index.js:3191:26) at Object.codeToHtml (C:\PEN_Testing\environment\new_blog\node_modules\shiki\dist\index.js:3212:20) at filterIntoShiki (C:\PEN_Testing\environment\new_blog\node_modules\hexo-plugin-aurora\lib\highlighter\index.js:56:32) at renderer.code (C:\PEN_Testing\environment\new_blog\node_modules\hexo-plugin-aurora\lib\highlighter\index.js:127:14) at renderer.<computed> [as code] (C:\PEN_Testing\environment\new_blog\node_modules\marked\lib\marked.cjs:2340:48) at _Parser.parse (C:\PEN_Testing\environment\new_blog\node_modules\marked\lib\marked.cjs:2031:42) at parse (C:\PEN_Testing\environment\new_blog\node_modules\marked\lib\marked.cjs:1991:23) at Marked.parse (C:\PEN_Testing\environment\new_blog\node_modules\marked\lib\marked.cjs:2484:28) at Function.marked [as parse] (C:\PEN_Testing\environment\new_blog\node_modules\marked\lib\marked.cjs:2518:27) at module.exports (C:\PEN_Testing\environment\new_blog\node_modules\hexo-renderer-marked\lib\renderer.js:279:27) at Hexo.tryCatcher (C:\PEN_Testing\environment\new_blog\node_modules\bluebird\js\release\util.js:16:23) at Hexo.<anonymous> (C:\PEN_Testing\environment\new_blog\node_modules\bluebird\js\release\method.js:15:34) at C:\PEN_Testing\environment\new_blog\node_modules\hexo\dist\hexo\render.js:73:28 at tryCatcher (C:\PEN_Testing\environment\new_blog\node_modules\bluebird\js\release\util.js:16:23) at Promise._settlePromiseFromHandler (C:\PEN_Testing\environment\new_blog\node_modules\bluebird\js\release\promise.js:547:31) at Promise._settlePromise (C:\PEN_Testing\environment\new_blog\node_modules\bluebird\js\release\promise.js:604:18) at Promise._settlePromiseCtx (C:\PEN_Testing\environment\new_blog\node_modules\bluebird\js\release\promise.js:641:10) at _drainQueueStep (C:\PEN_Testing\environment\new_blog\node_modules\bluebird\js\release\async.js:97:12) at _drainQueue (C:\PEN_Testing\environment\new_blog\node_modules\bluebird\js\release\async.js:86:9) at Async._drainQueues (C:\PEN_Testing\environment\new_blog\node_modules\bluebird\js\release\async.js:102:5) at Async.drainQueues [as _onImmediate] (C:\PEN_Testing\environment\new_blog\node_modules\bluebird\js\release\async.js:15:14) at process.processImmediate (node:internal/timers:483:21) 我在使用hexo建站,我安装了两个hexo,因为之前的hexo因为修改了太多配置,所以我想换个新的。我把旧hexo中的文章拿到新hexo中,出现了以上错误。
首先,错误发生在codeToThemedTokens函数中,这个函数属于shiki库,看起来是在处理代码块的高亮。错误提示code.split不是一个函数,说明传入的参数code可能不是一个字符串,导致split方法调用失败。可能是在渲染代码块的时候,传入的代码内容不是字符串类型,或者某些配置不正确。
用户提到他们从旧的Hexo迁移了文章到新的Hexo,所以问题可能出在文章的格式或配置上。可能是旧的文章中的代码块语法与新Hexo使用的插件(如hexo-plugin-aurora或hexo-renderer-marked)不兼容。或者,新Hexo安装的某个插件版本与旧文章中的写法有冲突。
接下来,我需要考虑常见的可能原因。例如,Markdown中的代码块语法是否正确?比如是否缺少语言声明,或者代码块语法错误。另外,可能是插件之间的兼容性问题,比如marked和shiki的版本问题。或者是hexo-plugin-aurora插件的配置问题,导致处理代码块时出错。
可能的解决步骤包括:检查文章中的代码块语法是否正确,确保代码块使用了正确的围栏式标记(三个反引号)并指定了语言;尝试禁用或更新相关的插件,比如hexo-plugin-aurora,或者检查其配置;清理Hexo缓存,重新安装依赖,确保所有插件都是最新且兼容的版本;还可以尝试将代码块替换为旧版本支持的语法,或者暂时移除有问题的文章,逐步排查。
另外,用户可能没有正确安装或配置语法高亮相关的插件,比如shiki需要额外的依赖或主题。也有可能是在迁移过程中,某些文件的格式被破坏,比如YAML front-matter中有语法错误,导致解析问题,从而影响了后续的代码块处理。
需要建议用户逐一排查这些可能性,从简单的步骤开始,比如检查代码块语法,清理缓存,更新插件,再到更复杂的步骤,比如禁用插件或检查配置。同时,提醒用户在遇到此类错误时,查看官方文档的故障排除部分,或者考虑回退到之前的稳定版本,以确定是否是版本升级带来的问题。这个错误通常是由于Hexo渲染Markdown代码块时语法冲突或插件版本不兼容导致的。以下是逐步排查和解决方案:
一、错误核心原因定位
从报错code.split is not a function
可知:
- 触发位置:
shiki
语法高亮库处理代码块时 - 根本原因:代码块内容被传递为非字符串类型(可能是对象或空值)
二、关键排查步骤
1. 检查文章中的代码块语法
在所有迁移的文章中,确认代码块使用标准的围栏式语法:
```语言类型(如js/python/bash)
代码内容
```
⚠️ 缺少语言声明或反引号不匹配会引发解析错误
2. 清理Hexo缓存
hexo clean # 删除public文件夹和缓存
3. 检查插件版本冲突
错误栈涉及hexo-plugin-aurora
和marked
:
npm list marked shiki hexo-plugin-aurora # 查看插件版本
尝试回退版本(常见组合):
npm uninstall hexo-plugin-aurora
npm install marked@4.0.0 shiki@0.11.1
4. 临时禁用语法高亮
在_config.yml
中添加:
highlight:
enable: false
prismjs:
enable: false
5. 检查YAML Front-Matter
确保文章头部元数据没有特殊符号污染:
---
title: 正常标题 # 无冒号嵌套如 title: "含有:冒号"
date: 2023-01-01
---
三、进阶修复方案
方案A:修复shiki高亮逻辑
修改node_modules/shiki/dist/index.js
约3191行:
// 原始代码(易错)
const code = params.code;
// 修改为(强制类型转换)
const code = String(params.code || '');
方案B:替换渲染引擎
改用更稳定的hexo-renderer-markdown-it
:
npm uninstall hexo-renderer-marked --save
npm install hexo-renderer-markdown-it --save
四、验证流程
- 新建测试文章只包含简单代码块
- 逐篇恢复旧文章,定位具体出错文件
- 使用
hexo g --debug
观察详细编译日志
五、技术原理说明
错误源于marked
解析器与shiki
的交互异常。当代码块内容被意外转换为非字符串类型(如undefined
或对象)时,调用split()
方法会触发TypeError。常见于:
- 未闭合的HTML标签干扰解析
- 特殊字符未转义
- 插件版本API变更
建议优先通过版本锁定保持依赖稳定性,参考package.json
:
{
"dependencies": {
"hexo": "^6.3.0",
"marked": "^4.0.18",
"shiki": "^0.11.1"
}
}
相关推荐


















