hexo博客搭建时图片无法正常显示的问题

卫博学
2023-12-01

前言

最近在GitHub Pages中搭建了hexo博客,并且使用了next主题,当使用文字博客或者外链图片时没有什么问题,但是使用内置图片却出现了问题,在此记录下来。

hexo-asset-image无法在新版本使用

当发布新文章时,我使用了hexo-asset-image这个插件,这个插件需要在_config.yml中设置post_asset_foldertrue才能开启,并且需要安装插件,安装方法为:

npm install hexo-asset-image --save

使用该插件后新建文章hexo new "测试文章",就会在post文件夹生成同名的文件夹,该文件夹为存放图片的文件夹,然后再在文章里使用markdown的引用图片的方式进行引用,在使用hexo generate后,生成的html文件会自动的加上图片的绝对路径。

但是这中方法在hexo3.0之后貌似无法使用,目前我用的hexo版本为4.2,也是无法使用的,生成的链接类似:

/.ml//logo.jpg

导致在网页上无法显示

修改方法

第一种修改方法为通过hexo自带的图片标签,如

{% asset_path slug %}
{% asset_img slug [title] %}
{% asset_link slug [title] %}

详见hexo官方对资源文件夹的说明,官方也明确提到了,如果使用markdown的语法,图片可能不会正常显示。

第二种修改方法时是通过修改hexo-asset-image这个插件的源代码来实现的,找到路径node_modules\hexo-asset-image\index.js,替换其中的内容为:

'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();
    }
  }
});


然后再进行生成,生成的图片链接就会正常了,也能够访问。

 类似资料: