部署hexo到github.io的一些小问题(持续更新)
1. 操作没问题,但就是部署失败
hexo 在部署主题到 github.io 的时候,会有不小的延迟,如果确信你的操作没问题,但就是主题没有生效,那很有可能是github-Pages正在处理( github-pages 会显示一个 Queued ,意思就是在队列里面,还没处理)

2. 加载图片
加载图片是一个稍微复杂一点的操作
官方文档推荐了两种方法
-
自己设置文件夹:应该将图片文件放进
source/img里面(文件夹名字可以自定义),然后这样写但是我在使用这种方法的时候,会出现本地编写的时候,无法识别图片导致实时预览效果很差
所以我尝试将路径前面加了两个点 ->发现没有问题,预览和hexo g都没有出现差错。 -
自动创建
asset_folder:还有就是将config.yml里的post_asset_folder设置为true,他就会在你new一篇文章的时候,自动在 _post 文件夹下创建一个和文章同名的文件夹,来存放你所有的资源文件,然后你引用图片就可以 ->这样做的好处就是可以自动创建文件夹,并按不同文章分类,当然,你可以可以创建一个经常在各个文章调用资源的公共文件夹 -
相对路径引用的标签插件:这个是一个新功能,但是在本地编写的时候没法预览还是不太方便,详细可以看官方文档,我把链接贴在这里 hexo官方文档
-
最后也是我在用的,使用 Markdown 嵌入图片,这个也是会在你 new 一篇文章的时候,自动在 _post 文件夹下创建一个和文章同名的文件夹,来存放你所有的资源文件,但是你写地址的时候,会直接将
解析为<img src="/2020/01/02/foo/image.jpg">,但是如果你在本地编辑,则无法显示预览,填写则无法在html上正确显示链接,所以我们可以在hexo转化的过程中,做一下改动,直接改代码!!!-
先看你使用的是哪个渲染器,直接在你博客主目录执行
1
npm list
1
2
3
4
5
6
7
8
9
10
11
12$ npm list
hexo-site@0.0.0 /Users/darkFlameMaster/BlogSpace
├── hexo-deployer-git@4.0.0
├── hexo-filter-mathjax@0.9.0
├── hexo-generator-archive@2.0.0
├── hexo-generator-category@2.0.0
...
├── hexo-renderer-markdown-it@7.1.0
...
├── ...
├── ...
└── ...hexo-renderer-markdown-it 就是我的渲染器
-
hexo-renderer-markdown-it渲染器如果你的渲染器是
hexo-renderer-markdown-it,修改如下内容:1
post_asset_folder: true
如果你的渲染器是
hexo-renderer-marked搜索
post_asset_folder,改成true,然后添加1
2
3
4post_asset_folder: true
marked:
prependRoot: true
postAsset: true如果没有,那就在自己添加一下,但我强烈建议你使用
hexo-renderer-markdown-it -
引入
js代码修改源代码是很愚蠢的做法,不要听信别人的教程,直接在你博客的根目录创建
script文件夹,然后在里面创建一个fix_img_path.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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70hexo.extend.filter.register('before_post_render', function (data) {
if (!data.source) return data;
// 1. 计算前缀
let urlPrefix = data.path.replace(/\.html$/, '');
if (!urlPrefix.startsWith('/')) urlPrefix = '/' + urlPrefix;
if (!urlPrefix.endsWith('/')) urlPrefix += '/';
// 2. 检查是否跳过
function shouldSkip(src) {
return !src || /^(\s*$|https?:|\/\/|\/|data:)/.test(src);
}
// 3. 正则表达式
const regex = /(```[\s\S]*?```|`[^`]*`)|(!\[.*?]\()((?:[^()]|\([^()]*\))+)(\))|(<img\s+[^>]*?src=(["']))([^"']+)(\6[^>]*>)/gi;
data.content = data.content.replace(regex, function (match, codeBlock, mdPre, mdContent, mdPost, htmlPre, quote, htmlContent, htmlSuffix) {
if (codeBlock) return match;
// --- Markdown ---
if (mdPre) {
let src = mdContent;
let title = '';
// 标题以 空格+" 或 空格+' 或 空格+= 开头
const titleMatch = mdContent.match(/^(.+?)(\s+["'=].*)$/);
if (titleMatch) {
src = titleMatch[1];
title = titleMatch[2];
}
if (shouldSkip(src)) return match;
const filename = src.split('/').pop();
return `${mdPre}${urlPrefix}${filename}${title}${mdPost}`;
}
// --- HTML ---
if (htmlPre) {
if (shouldSkip(htmlContent)) return match;
const filename = htmlContent.split('/').pop();
return `${htmlPre}${urlPrefix}${filename}${htmlSuffix}`;
}
return match;
});
return data;
});
```
这里有一个小小的缺陷,那就是 本地的图片 只能引入固定位置的资源了,也就是前面所说的自动创建的与文章同名的文件夹
如果我们想要引用其他位置的资源文件,除了将文件拷贝过来,就只能将文件上传到指定的云端来引入了
当前大部分情况下我们 **本地文件夹+网络连接** 已经可以覆盖90%的情况了,如果我们有一些公共的资源文件,可以将文件放在 `source/img` 没有就自己新建一个, `hexo d` 提交到 `github` 后,可以直接引用 `博客地址/img/文件名` 来引用了非常好用!!!
## 3. 上传 github 报权限问题
如果你感觉自己配置完全没问题,那你可以试着把代理关掉
```text
Please make sure you have the correct access rights
and the repository exists.
FATAL Something's wrong. Maybe you can find the solution here: https://hexo.io/docs/troubleshooting.html
Error: Spawn failed
at ChildProcess.<anonymous> (/Users/DarkFlameMaster/BlogSpace/node_modules/hexo-util/lib/spawn.js:51:21)
at ChildProcess.emit (node:events:513:28)
at ChildProcess._handle.onexit (node:internal/child_process:291:12)
-
同样我在这里也提到过类似的问题 git 的奇怪问题 kex_exchange_identification: Connection closed by remote host
- 标题: 部署hexo到github.io的一些小问题(持续更新)
- 作者: Lucas
- 创建于 : 2023-04-18 03:57:31
- 更新于 : 2025-12-23 17:31:40
- 链接: https://darkflamemasterdev.github.io/2023/04/18/部署hexo到github.io的一些小问题/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。