问题描述
使用 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.ioroot: /- …
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