最近把博客使用的 hexo-theme-even 模板引擎从 Swig 换成了 ejs,主要原因是 Swig 相关的依赖扫描出了很多安全问题。
顺便把 node-sass 换成了 dartsass,node-sass 在大陆的使用体验太差了,差评!
全部弄好以后是这样的,所有的 npm 包都可以直接升级到最新版,看着舒服多了:
$ npm i
removed 17 packages, and audited 227 packages in 1s
19 packages are looking for funding run `npm fund` for details
found 0 vulnerabilities
|
使用方式
仓库地址是:https://github.com/zeed-w-beez/hexo-theme-even
npm install hexo-renderer-ejs hexo-renderer-dartsass --save git clone https://github.com/zeed-w-beez/hexo-theme-even themes/even cp themes/even/_config.yml.example themes/even/_config.yml
|
use ejs instead of swig
先使用 ChatGPT 把 swig 转换为 ejs 格式,效果棒棒哒
再批量修改一下文件后缀和引用
cd layout
# rename template file extension: find . -type f -name "*.swig" -exec sh -c 'mv "$0" "${0%.swig}.ejs"' {} \;
# replate template file reference: find . -type f -exec sed -i 's/\.swig/\.ejs/g' {} \;
|
有些问题需要手动修复一下
转换完肯定是不能直接运行的,还有一些地方需要手动修改下
{%- block content -%}{%- endblock -%} 改为 <%- body %>
- 如果输出的是转义后的 HTML,需要把 ejs 标签
<%= 改为 <%-,具体看下面的标签说明(但是像 page.description 这样的字段,最好还是保留转义)
- 转换之后有一些
partial("xxx.ejs") 引用是用的变量模式,会报错说找不到,改成直接引用就好了
- 开发的时候
hexo s 会有缓存,遇到没效果的,可以先执行一下 hexo clean
EJS 标签含义
<% ‘脚本’ 标签,用于流程控制,无输出。
<%_ 删除其前面的空格符
<%= 输出数据到模板(输出是转义 HTML 标签)
<%- 输出非转义的数据到模板
<%# 注释标签,不执行、不输出内容
<%% 输出字符串 ‘<%’
%> 一般结束标签
-%> 删除紧随其后的换行符
_%> 将结束标签后面的空格符删除
- 其他语法可以参考官方文档
use nunjucks instead of swig
最开始打算是换成 nunjucks 的,但是没成功。
cd layout
# rename template file extension: find . -type f -name "*.swig" -exec sh -c 'mv "$0" "${0%.swig}.njk"' {} \;
# replate template file reference: find . -type f -exec sed -i 's/\.swig/\.njk/g' {} \;
# replate extends with include in njk files find . -type f -name "*.njk" -exec sed -i 's/extends/include/g' {} \; find . -type f -name "*.njk" -exec sed -i 's/||/or/g' {} \; find . -type f -name "*.njk" -exec sed -i 's/&&/and/g' {} \; find . -type f -name "*.njk" -exec sed -i 's/===/==/g' {} \; find . -type f -name "*.njk" -exec sed -i 's/!==/!=/g' {} \;
find . -type f -name "*.njk" -exec sed -i 's/{%-/{%/g' {} \; find . -type f -name "*.njk" -exec sed -i 's/-%}/%}/g' {} \;
# Template render error: (unknown path) Error: template not found: _layout.njk # 搞不定这个错误 ε=(´ο`*)))唉 # 而且 (hexo-renderer-nunjucks)[https://github.com/hexojs/hexo-renderer-nunjucks] has been archived by the owner on Jul 29, 2023。 # 放弃了,改用 EJS。
|