Hugo 网站优化(1): 渲染 Markdown 图片引用地址

简介: 搭建一个自己的博客系统, 优化图片展示, 让书写更简单

Hugo 网站优化(1): 渲染 Markdown 图片引用地址

大家好, 我是老麦。 最近有空, 把我的网站优化了一下。 加上 CDN 之后, 国内访问嗖嗖嗖的。

https://tangx.in

作为一个技术人员, 使用 Markdown 写文章确实很方便。

引用图片通常有如下三种

# 1. 相对路径
![](image.png)   # 本文不讨论
![](./image.png)

# 2. 工程目录绝对路径
![](/static/logo/image.png) 

# 3. 外部引用
![](http://example.com/logo/image.png) 

但如果通过 hugo, jekyll 等引擎编译后,

相对路径: 由于 my-post.md 文件被编译成 my-post/index.html。 最终网站静态目录如下

.
├── image.png
└── my-post
    └── index.html

工程目录绝对路径/static 是一个关键字, 其子文件在编译后, 才存在于 一级 目录

## 编译前
.
└── static
    └── logo
        └── avatar.png

## 编译后
public  # 网站目录
└── logo # 一级目录
    └── avatar.png
1. 相对路径2. 工程目录绝对路径 通常会出现渲染后的路径错误。

优化渲染 Markdown 图片引用地址

一切为了保证 原始文件 markdown 本身展示图片可用。

决定在渲染模版中,做一些逻辑判断操作。

Hugo 配置如下

config.toml 中新增如下两个配置文件

# 去除工程目录 prefix 文件路径
[params.static_prefix]
    name = "/static"

# 外部 CDN 加速图片, 将图片地址替换成外部前缀
[params.image_cdn]
    enable = false 
    host = "https://cdn.example.com
    # host = "https://cdn.jsdelivr.net/gh/user/user.github.io"

render-image.html 文件优化如下

渲染逻辑如下。

  1. 通过 .Destination 拿到图片在 markdown 中的地址, 并保存在变量 $img_dest
  2. 判断 static_prefix 参数是否设置。

    1. : 去除 $img_dest 中的 prefix
  3. 相对路径 修改为 绝对路径

    1. 这里以 ./ 作为相对路径的 关键字 进行判断。
    2. 因此优化操作不能识别 image.png../image.png 这两种形式。 需要要求个人书写习惯。
  4. 判断 image_cdn 是否设置。

    1. : 在 绝对路径 前添加 外部 CDN 地址
<!-- 1. 变量赋值 -->
<!-- 1.1. 默认情况, 获取图片的定义地址 -->
<!-- ./image.png -->
<!-- /static/img/image.png -->
<!-- http://example.com/path/to/image.png -->
{{- $img_dest := .Destination -}}

<!-- 1.2. 网站 BaseURL 与 文件相对路径 -->
{{- $site_url := .Page.Site.BaseURL -}}
{{- $rel_url := $site_url | relURL}}

<!-- 2. 去除 prefix, 并添加 **没有域名的 BaseURL ** -->
{{ if and (isset .Page.Site.Params "static_prefix") }}
{{ $prefix := .Page.Site.Params.static_prefix.name }}
<!-- img_dest = /prefix/static/image.png -->
{{ if (hasPrefix $img_dest $prefix )}}
<!-- img_dest = /static/image.png -->
{{ $img_dest = (strings.TrimPrefix $prefix $img_dest ) }}
<!-- img_dest = /path/to/static/image.png -->
{{ $img_dest = (print (path.Join $rel_url $img_dest))}}
{{ end }}
{{ end }}

<!-- 3. 计算文件绝对路径 -->
<!-- dest = ./image.png -->
{{ if (hasPrefix $img_dest "./") }}
<!-- img_dest = .././image.png -->
{{ $img_dest = (print "../" (path.Join $img_dest)) }}
<!-- img_dest = /posts/<year>/<month>/<date>/<post_name>/.././image.png -->
{{ $img_dest = (print (path.Join .Page.RelPermalink $img_dest))}}
{{ end }}


<!-- 4.  开启 CDN -->
<!-- 是否开启 CDN 选项 -->
{{- if (and .Page.Site.Params.image_cdn.enable (not .Page.Site.IsServer)) -}}
<!-- 文件不以 http 开头 -->
{{ if not (hasPrefix $img_dest "http") }}
<!-- image_cdn + /path/to/image.png -->
{{ $img_dest = (print .Page.Site.Params.image_cdn.host (path.Join $img_dest)) }}
{{ end }}
{{- end -}}
<!-- CDN END -->


<img 
    src="{{ $img_dest | safeURL }}" 
    alt="{{ .Text }}" 
    {{ with .Title }} 
        title="{{ . }}" 
    {{ end }} 
/>
{{- /* Drop trailing newlines */ -}}

被玩崩了的 jsdelivr CDN

jsdelivr CDN 已经被玩坏了。

对于 github 个人用户的资源加速已经, 目前只能在国外有效。 国内 IP 访问, 将被重定向到 github raw 页面, 然而这个地址被墙了, 无法访问。

相关实践学习
Serverless极速搭建Hexo博客
本场景介绍如何使用阿里云函数计算服务命令行工具快速搭建一个Hexo博客。
相关文章
|
7月前
|
前端开发
914.【前端】Taro集成towxml渲染markdown文档
914.【前端】Taro集成towxml渲染markdown文档
434 2
|
2月前
|
存储 前端开发 JavaScript
🚀前端轻松实现网页内容转换:一键复制、保存图片及生成 Markdown
在现代前端开发中,提升用户的交互体验至关重要。本文将详细介绍如何使用 HTML2Canvas 和 Turndown 两个强大的 JavaScript 库,实现将网页选中文本转化为图片并保存或复制到剪贴板,或将内容转换为 Markdown 格式。文章包含核心代码实现、技术细节和功能拓展方向,为开发者提供了一个轻量级的解决方案,提升用户体验。
168 68
|
2月前
|
开发工具
用 Vim 编辑 Markdown 时直接粘贴图片
介绍一款 Vim 插件,可以帮助提升编辑 Markdown 时的从剪贴板粘贴图片的效率和体验。
33 2
|
3月前
|
JSON 小程序 前端开发
towxml的使用,在微信小程序中快速将markdown格式渲染为wxml文本
本文介绍了在微信小程序中使用`towxml`库将Markdown格式文本渲染为WXML的方法。文章提供了`towxml`的概述、安装步骤、以及如何在小程序中配置和使用`towxml`进行Markdown解析的详细说明和代码示例。
|
4月前
|
Web App开发 Linux Windows
解决Markdown文件上传至CSDN无法显示本地图片问题-白嫖版,分享给别人的md文件图片不显示的解决方案
解决Markdown文件上传至CSDN无法显示本地图片问题-白嫖版,分享给别人的md文件图片不显示的解决方案
118 3
|
7月前
|
存储 JSON 资源调度
next.js博客搭建_react-markdown渲染内容(第三步)
next.js博客搭建_react-markdown渲染内容(第三步)
114 1
|
前端开发
【前端】从markdown格式文本中提取图片链接
【前端】从markdown格式文本中提取图片链接
160 0
|
小程序 前端开发
微信小程序_自定义markdown的图片点击放大处理
微信小程序_自定义markdown的图片点击放大处理
408 0
|
Python Windows
工具:语雀导出MarkDown文档后图片修复
工具:语雀导出MarkDown文档后图片修复
555 0
markdown插入图片、音频视频
markdown插入图片、音频视频
345 0
markdown插入图片、音频视频