这篇博文讲解了本地图片的路径设置

(32条消息) hexo博客中插入图片失败——解决思路及个人最终解决办法_m0_43401436的博客-CSDN博客

本地source文件夹里的md文件和图片整好后,hexo执行编译工作,在public文件夹中生成网页及图片

下载插件并修改代码确实解决了问题

安装的插件是hexo-asset-image, 将/node_modules/hexo-asset-image/index.js的代码修改为:

具体过程可以参考这篇博文Hexo-NexT 添加图片 - chang101 - 博客园 (cnblogs.com)

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
'use strict';
var cheerio = require('cheerio');

// http://stackoverflow.com/questions/14480345/how-to-get-the-nth-occurrence-in-a-string
function getPosition(str, m, i) {
return str.split(m, i).join(m).length;
}

var version = String(hexo.version).split('.');
hexo.extend.filter.register('after_post_render', function(data){
var config = hexo.config;
if(config.post_asset_folder){
var link = data.permalink;
if(version.length > 0 && Number(version[0]) == 3)
var beginPos = getPosition(link, '/', 1) + 1;
else
var beginPos = getPosition(link, '/', 3) + 1;
// In hexo 3.1.1, the permalink of "about" page is like ".../about/index.html".
var endPos = link.lastIndexOf('/') + 1;
link = link.substring(beginPos, endPos);

var toprocess = ['excerpt', 'more', 'content'];
for(var i = 0; i < toprocess.length; i++){
var key = toprocess[i];

var $ = cheerio.load(data[key], {
ignoreWhitespace: false,
xmlMode: false,
lowerCaseTags: false,
decodeEntities: false
});

$('img').each(function(){
if ($(this).attr('src')){
// For windows style path, we replace '\' to '/'.
var src = $(this).attr('src').replace('\\', '/');
if(!/http[s]*.*|\/\/.*/.test(src) &&
!/^\s*\//.test(src)) {
// For "about" page, the first part of "src" can't be removed.
// In addition, to support multi-level local directory.
var linkArray = link.split('/').filter(function(elem){
return elem != '';
});
var srcArray = src.split('/').filter(function(elem){
return elem != '' && elem != '.';
});
if(srcArray.length > 1)
srcArray.shift();
src = srcArray.join('/');
$(this).attr('src', config.root + link + src);
console.info&&console.info("update link as:-->"+config.root + link + src);
}
}else{
console.info&&console.info("no src attr, skipped...");
console.info&&console.info($(this));
}
});
data[key] = $.html();
}
}
});

持久化文章url后,出现了新的问题

  本博客参考了系列视频卷二兔的个人空间_哔哩哔哩_bilibili制作,作者使用了持久化文章url的技术。

  持久化文章url-uniform resource locator-同一资源定位符,是为了文章更好地被搜索引擎收录(需要不少配置),生成简单且不随标题而改变的url。

  但是!使用abbrlink持久化文章链接名称后,图片路径在本地没问题,部署到github后,其html网页中的图片路径会出新问题。

  试图看index.js在干嘛,无果,于是怕麻烦的我取消了持久化,回到了美好的从前。

可以使用图床

  本博客参考了系列视频卷二兔的个人空间_哔哩哔哩_bilibili制作,其中提到了图床技术,将所有图片上传到github上的图床仓库,这样本地md文件和生成的网页中,图片的地址就都是网上图片了,从而不用考虑文件结构的变化。理论上,使用图床,就可以解决持久化url的问题。

访问github并不容易

  可是访问github并不容易,需要处理域名污染(查真实ip地址来改hosts,防止dns-domain name server-域名服务器返回错误的ip地址),需要vpn(加密请求的ip地址,使其符合路由节点的入站规则,拿到东西了再在本机上解密)。

  然而网页和图片都在github的服务器上,所以要么都能访问到,要么都访问不到,所以真要搞一个基于github的博客,这样搞还是挺好的。

  但是我只是想有一个记录自己所思所想的博客,觉得本地搞好方便,省去了搞ip的麻烦,果然还是回退到二吧。

  其实根本原因还是不知道hexo是怎么把source中的md文件和图片生成为pulic中的网页和图片的,要是我知道用什么语法改哪个配置文件,就能自己设置两者的对应关系了。