使用符号链接实现 Halo 主题的热更新
介绍
在插件开发的时候有 Devtools 可以很方便的调试和重载插件, 但是找了一下之后没发现主题有类似的开发工具, 每次更新了代码都需要把新的主题重新上传安装再
想要方便一点可以用一些比较绕的方法: 可以用符号连接的方式实现 (思路源自 howiehz)
核心就是在 halo 存放主题的 themes 文件夹里做一个符号链接指向主题解压缩之后的文件夹
也就是这样:
theme-terminal-ez -> /Projects/halo-theme-terminal/dist/theme-terminal-ez
这里的符号链接名字需要和主题的 ID 一样
如果使用 halo 官方的主题开发工具 @halo-dev/theme-package-cli, 这个工具的产物是一个压缩包, 需要有一个脚本手动解压一下, 我这里是写的 Makefile 来配合主题开发工具使用的会比较方便
NODE_MODS := node_modules
DIST_DIR := dist
NAME := $(shell grep '^[[:space:]]*name:' theme.yaml | head -n1 | cut -d ':' -f2 | xargs)
VERSION := $(shell grep '^[[:space:]]*version:' theme.yaml | head -n1 | cut -d ':' -f2 | xargs)
THEME := $(NAME)-$(VERSION)
ARCHIVE := $(THEME).zip
all: install build test
$(NODE_MODS): package.json
pnpm install
$(DIST_DIR): $(NODE_MODS) theme.yaml settings.yaml build.js templates
pnpm build
install: $(NODE_MODS)
build: $(DIST_DIR)
test: $(DIST_DIR)/$(ARCHIVE)
@unzip $(DIST_DIR)/$(ARCHIVE) -d $(DIST_DIR)/$(NAME)
.PHNOY: clean
clean:
@rm -rf $(DIST_DIR)
@rm -rf $(BUILD_DIR)
@rm -rf $(NODE_MODS)
@rm -rf templates/assets/$(DIST_DIR)
这就是使用 @halo-dev/theme-package-cli 打包之后再解压到 dist 文件夹, 这样只需要使用 make 命令就可以自动生成一个压缩包产物和一个文件夹
具体流程
- 先正常安装主题
- 写一个脚本每次 build 产出一个放主题文件的文件夹 (就是和解压后的一样)
- 在 halo 运行目录下的
themes文件夹下, 做一个和主题 ID 名字一样的符号链接, 链接到产出的主题文件夹
每次代码更新重新构建之后, 就可以应用新代码了, 如果更新了 settings.yaml 或者没有成功更新, 就重载一下主题或者再清理模板缓存之后再重载一遍
其他思路
可以尝试用 halo 安装主题的 API, 在 build 的时候调用 API 自动安装
Comments