问题描述
使用 hexo
构建博客时,把图片文件放在$/source.
下,然后在文中使用
进行访问,执行命令hexo server
后,可以在页面中正常浏览图片,$/source.
下的图片可以由localhost:4000/****.png
直接访问到。
使用 Typora 编辑 Markdown 时,粘贴图片可以选择将图片复制到相对路径的本地文件夹中。
怎么样设置才可以保证粘贴后,本地可以正常浏览图片,网页也可以正确显示?
Typora配置
设置图像粘贴位置
打开 Typora ,打开格式(O)-图像-全局图像设置
,在“插入图片时…”选择复制到指定路径,然后在下面写入../images/${filename}
($
中的参数是以文件名命名的文件夹),并勾选“优先使用相对路径”。
也可以不通过全局图像设置来设置这个路径,直接在文件的头部写入以下代码块,可以实现同样效果。
之后,每次复制到文本中的图像都会被拷贝到这个文件夹中,并且自动添加相对路径到这个文件夹下:
但很显然,此时的链接并不是我们想要的(我们想要的是
),前面那个表示返回上一级目录的点点怎么自动去掉呢?
设置图片根目录
打开格式(O)-图像-全局图像设置
,选择source
文件夹,确定,这时候回到文件中,可以看到在文章头部出现了这么一行字:
然后再次粘贴图片,发现图片的地址为:
这样无论是本地文件浏览还是使用hexo浏览或生成静态文件,都没有问题了。
Hexo设置模板
每次创建文件都设置路径显然是个愚蠢的办法,因此我们应该在 hexo 中设置模板文件,在每次创建文章时都加上关于图像的路径设置。
打开$/scaffold/post.md
,在头部写入两行配置代码:
创建新文章:
1 | hexo new "test article" |
粘贴图片:
这边出问题了!!!图片被拷贝到了文件夹 '..\images\**'
下面了,仔细观察发现创建文件时,typora-copy-images-to
后面的参数被自动加上了引号,这是因为hexo会对头信息中的括号{}进行解析,这边加上引号是进行了一定的变量保护。
那还是靠全局设置就好了,不要这个变量了。
插入图片:
成功!
如何优雅地部署到GitHub?
部署到GitHub参考One-Command Deployment,如果自己的ssh-key已经添加到GitHub账户中,直接将ssh
链接放在deploy.repo
中即可。
但是发布为GitHub Pages时在图片显示方面遇到了一个问题。
比如我们在账户下创建了一个名为blog
的仓库专门用来写博客,然后创建GitHub Pages来放置我们的博客页面
那么问题来了,比如我的账户名为 kevin,那么我的 GitHub Pages 的访问地址为 https://whuls.github.io/blog
,这与我们设置的图片地址不符(
访问的将会是https://whuls.github.io/images/**.png
),我们可以使用特殊插件来完成对相应地址的解析(Assets Folder),不过使用这个方法导致无法在Typora中预览图片,而且可配置性极差。
一个比较好的方法是修改路径,将图片引用路径改成
,然后把source
文件夹命名为blog
,接着修改模板文件的头信息typora-root-url:../..
,在格式(O)-图像-全局图像设置...
处修改图像插入时../复制到指定目录的目录为../../blog/images/${filename}
,最后,配置_config.yml
,将source_dir
改成blog
,将url
改成https://whuls.github.io/blog
,root
改成/blog/
。
_config.yml
- 修改模板文件
- 全局图像设置
- 文件夹重命名
之后,每次粘贴图片自动填充的地址为:
在typora中可以正确浏览,部署到GitHub Pages上也可以正常显示(无论是在 archive 总目录下或者单独页面下)
如何更优雅地部署到GitHub上?
通过上一步的部署和配置,折腾了一番,又是改文件夹名称又是配置typora的,搞了半天把网站部署到了whuls.github.io/blog
上面去了。
那么问题来了,我觉得那个路径/blog
越看越不顺眼,能不能直接用whuls.github.io
访问博客?
首先要做的,就是把上一步的花里胡哨的改动改回来:
- 把
blog
文件夹重新改名为source
把文章中图片引用的位置由

改回
打开typora,把复制图像到路径的目录改回
../images/${filename}
- 把每个文件头信息中的
typora-root-url
由../..
改回..
- 修改
_config.yml
:url: https://whuls.github.io
root: /
- …
source_dir: source
接着我要把这个博客部署到GitHub和Gitee上,预期结果是能够通过whuls.github.io
和whuls.gitee.io
直接访问我的博客,两个网站的操作略有不同:
- GitHub:新建仓库,命名为
whuls.github.io
(不用手动创建github pages),然后把ssh链接拷贝到_config.yml
的deploy.repo
字段中 - Gitee:新建仓库,命名为
whuls
,接着在“服务-Gitee Pages”中启动pages服务,然后把ssh链接拷贝到_config.yml
的deploy.repo
字段中
_config.yml
文件设置多个部署仓库的方式为:
部署时,首先清空已生成的public
1 | $hexo clean |
然后部署
1 | $hexo deploy |
也可以用hexo的监视变动功能,生成文件后立刻部署
1 | $hexo g -d # 等同于hexo generate --deploy |
或
1 | $hexo d -g # 等同于hexo deploy --generate |
参考:生成文件|hexo