更新日志

v0.17.4 (2026-06-20)

  • 多语言(站点配置)

    • 渲染前对 everkm.yamlconfig 整棵树做深度处理:模板全局变量 __configconfig(key=…) 读到的均为当前语言下的最终值(含嵌套对象与数组)。
    • 第一类 @i18n:<key>:继续引用语言包(__everkm/i18n/、主题与 extend 内 i18n 文件);无语言包时保留原引用并记录警告。
    • 第二类翻译对象:配置内标量可写与语言包同构的结构(_default + 语言码字段),用于 Algolia index_name、外链 url 等不宜进语言包的字段。
    • 移除 扁平兄弟 key 写法(如 index_name.enurl.zh);请改为翻译对象。
    • folders.breadcrumbstitle / urlconfig 采用同一套解析规则。
  • 默认排除 private

    • 正文渲染默认剔除 #private Tag 标记的内容块;posts() 等列表默认排除 frontmatter 带 private 标签的文章。
    • 预览时可设 EVERKM_PRIVATE=1 临时查看 private 内容;导出始终排除。

v0.17.3 (2026-06-17)

  • 多语言

    • LangBundle 扫描范围扩展:extend/templatesextend/dcard 内的 *.i18n.md / *.i18n.yaml 与主题、 __everkm/i18n 合并(低 → 高:主题 → extend/templates → extend/dcard → __everkm/i18n)。
  • 目录配置

    • everkm.yaml#folders 新增 url_id_suffix(默认 true):设为 false 时非 index 文章 URL 为 {slug}.html,不再追加 -{id};与 hash_scatter 正交。
  • dCard

    • 卡片支持更简洁的写法:在正文中单独占一行`dcard/卡片名` 即可插入对应卡片,无需再写代码块或填写配置。例如 `dcard/download` 可直接展示下载块。

v0.17.2 (2026-06-15)

  • 站点扩展目录(Breaking)

    • 站点级模板、静态资源、dCard 卡片、用于覆盖生成结果的 HTML 页面,统一放在 __everkm/extend/ 下(子目录分别为 templatesassetsdcardpages)。
    • everkm-publish init <站点根目录> 会在该目录下自动创建 extend 目录结构。
    • 以下旧路径不再支持,请一次性迁移到 extend 对应子目录:
      • __everkm/__themeextend/templates(及 extend/assets
      • __everkm/__assets、内容目录下的 __assetsextend/assets
      • __everkm/__public、内容目录下的 __publicextend/pages
      • 内容目录下的 __dcardextend/dcard
    • 预览时,放在 extend/assets 中的文件会优先于主题自带资源;导出完成后,extend/pages 中的 HTML 会覆盖同路径的生成页面。
  • CLI(Breaking)

    • everkm-publish init:改为在已存在的站点根目录中初始化,不再根据站点名称自动新建子目录。
      • 用法由 init <站点名> [--work-dir 父目录] 调整为 init <站点根目录>;需先自行创建该目录,例如 mkdir my-site && everkm-publish init my-site
      • 初始化时会同时创建空的 __everkm/everkm.yaml,供后续填写站点配置。
    • everkm-publish web:静态预览目录由 --work-dir 改为位置参数,用法为 web <目录>,例如 everkm-publish web ./dist
    • 执行 serveexportinit 等命令时,启动日志会输出当前 everkm-publish 版本号,便于确认是否已升级或排查问题。

v0.17.1 (2026-06-14)

  • 多语言

    • 站点配置与面包屑文案支持 @i18n:<key> 引用,按当前语言自动替换为对应译文。
    • 本地预览可通过 URL 参数 ?_lang 或 cookie __lang 切换语言,即时查看不同语言下的配置文案。
    • 可在项目 __everkm/i18n/ 下放置 *.i18n.yaml 语言包,覆盖主题自带译文;预览时修改语言包会自动生效,无需重启。
  • 页面渲染

    • 预览与导出行为更一致:主题若未提供 Tera 模板(如部分主题的 index.html),会自动改用主题自带的 JS 渲染,文章页与首页均可正常显示。
  • 导出与预览

    • 修复部分站点在默认导出并发下长时间无进展、无法完成静态导出的问题;多见于正文或宏引用中使用了由 JS 渲染的 dCard 卡片(例如列表类 dcard/items)。
    • 默认并发即可正常完成导出,一般无需再将 EVERKM_EXPORT_WORKERS 调小作为变通。
  • 导航与内链([[...]]

    • 导航函数 nav_indicator / nav_path / nav_treefrom_file 参数,若用 [[...]] 包裹,则与正文内链采用相同规则解析目标文章(标题、slug、路径等);普通字符串写法不变。
    • 内链在预览与导出时会直接解析为站点 URL;链接指向不存在或存在歧义(如同名标题对应多篇文档)时,会立即报错并指出问题链接,不再等到导出末尾才出现难以理解的提示。
    • 按标题或 slug 匹配内链时忽略大小写(如 [[faq]] 可匹配标题「FAQ」);若 slug 重复则会提示歧义。
    • 若标题可能在不同目录重复,建议改用显式路径,例如 [[./faq/]][[/section/doc/file]]
    • 新增 everkm-publish lint 可扫描全文内链,按行号列出无法解析或存在歧义的链接,适合发布前自检。
    • aNote 发布场景下,内链解析规则与命令行工具一致。
  • 错误提示

    • 因链接问题导致页面无法发布时,错误信息会标明页面 URL、源 Markdown 文件、具体链接地址及修改建议,便于快速定位。

v0.17.0 (2026-06-13)

  • 导出与预览

    • 大型站点静态导出与本地预览明显更快;列表筛选、标签/分类查询在大库下也更稳。
    • 预览默认启用图片懒加载(lazy_img);本地图片处理与缓存优化,重复预览同一媒体时更省 IO。
    • 导出并发由 --export-workers(别名 --export-jobs)统一控制,默认按 CPU 核数取值。
  • 索引与启动

    • 内容索引缓存于 {work_dir}/__everkm/cache/everkm-publish.db,启动时自动迁移,无需再手动执行 db-migrate
    • 版本升级后若索引结构不兼容会自动重建(首次启动可能稍慢,属正常现象)。
    • 目录配置 folders 与旧版 DirConfig 行为对齐;路径/slug/标题查找延续 v0.16.15 的大小写不敏感语义。
  • 主题安装

    • 远程安装对齐 ekmp-themes 官方目录;主源失败时尝试 CDN 备用地址。
    • 支持 {作者}/{主题名}@版本 表达式与本地 .zip 包安装。
    • 脚手架默认主题目录由 youlog 调整为 everkm/youlog(仅影响 init 新站点)。
  • Markdown 与页面表现

    • 破坏性变更{{everkm::include(...)}}{{everkm::toc(...)}} 等花括号宏已移除,请改用 ```macro/include``````macro/toc``` 等 fenced 块。
    • 预览与发布时,若正文首个 h1 与页面标题重复会自动隐藏,避免标题出现两次。
    • dCard 卡片渲染与 v0.16.15 对齐;扩展属性、exclude_tags 等在 scraper 升级后行为更一致。
    • 书籍/导航模板中 nav_tree 等间接拉取列表时,上下文传递更完整,减少二次渲染告警。
  • 模板与 CLI

    • 破坏性变更:Tera 模板中文章日期字段由 post.date 更名为 post.created_at(秒级时间戳)。
    • CLI 子命令 create 已改名为 init
    • 预览服务新增 /__everkm/ 导航页,便于浏览内置 API 与调试接口。
  • aNote 资源

    • 通过 aNote 导出静态站时,anote://assets/... 链接会物化到 dist/assets/media
    • Markdown 内链与 HTML 中 img/a 两条路径处理一致。

v0.16.15 (2026-04-11)

  • 路径与引用解析:按内容虚拟路径、slug、文章标题定位页面时忽略大小写,与仓库里文件名实际大小写不必一致。
  • 目录 URL:以 / 结尾的路径(含站点根 /)统一按「目录默认页」解析,覆盖常见约定:index.mdslugindex,以及「文件夹名与 md 主名相同」的 foo/foo.md 等。
  • Markdown 内链:内链里若写出带末尾 / 的目录地址,会按目录页解析并生成正确链接;相对路径、补 .md、附件等非正文资源的处理在若干边界情况下也更一致、可预期。

v0.16.14 (2026-04-08)

修复

  • 目录配置合并时,子目录 index.yaml 未写 breadcrumbs 时不再覆盖并清空祖先(如根目录)已合并的面包屑;与 template 等字段行为一致
  • 目录配置合并时,各层 index.yaml 中非空的 breadcrumbs 按深度追加到祖先链(继承根目录与各上级),不再被下一层整段替换导致丢失根配置
  • find_by_path("/") 正确解析内容根目录首页;目录级查找除 slug=index 外,文件名为 index 的页面亦视为目录 index 页

新增 / 优化

  • PostItem 增加 is_index_filename()is_dir_index_post(),供面包屑与路径查找复用
  • 页面面包屑:链首不再自动插入「Home」,中间层全部由各级 index.yaml 与目录 index post(dir_index,resolve_breadcrumbs_middle)生成——有 index post 的层级必有条目(YAML 非空优先,否则该级 index post 一条);链尾为当前页;若需首页入口请在 posts 根目录 index.yamlbreadcrumbs 中声明
  • .../index 目录 index 页可指定不同的 slug 作为内部引用,不影响最后生成的文件名为 index.html

v0.16.13 (2026-04-08)

  • 脚注定义的开始处添加分隔线
  • 修复:站点根 index.yaml 不再错误生成 URL 路径段
  • 文件名为 index 的页面,slug 强制为 index

v0.16.12 (2026-03-18)

  • 增加 CLI 参数 --lazy-img,导出时为正文图片启用懒加载
  • 脚注统一在正文末尾渲染

v0.16.11 (2026-03-13)

  • 修复 index.html 的 url_path 计算问题。去除 as_channel,统一由 slug=index 来决定 url_path
  • 增强 Breadcrumbs 解析能力
  • 增加 /__everkm/posts 接口概览所有页面
  • 过滤 __ 打头的 md 文件解析
  • DirConfig 支持变量 $THIS_DIR

v0.16.10 (2026-03-12)

  • 优化 assets public fallback 优先级
  • 优化 MIME 类型检测
  • everkm-publish web 添加请求日志输出

v0.16.9 (2026-03-11)

  • 目录配置里 hash_storage 可写作 hash_scatter(别名)
  • 各目录下的 index 页会生成 index.html,链接按所在目录;未在 index.yaml 里单独配置时,index 页会自动按频道页处理
  • 未在 index.yaml 配置面包屑时,会按当前页的 URL 路径自动生成:每一级目录对应的 index 页会出现在面包屑中
  • 当根据 URL 找不到 post 记录时,不再直接返回 404,改为用请求路径交给模板引擎尝试渲染
  • 目录配置增加 query 配置项,在渲染时传递给 query_string
  • 增加 nav_tree 函数
  • 增加 lang 函数

v0.16.8 (2025-12-09)

  • 修复对 blockquotecodeblock 块的扩展属性支持

v0.16.7 (2025-11-23)

  • 重命名 unopermalink
  • posts 列表增加 order_byorder_direction 参数

v0.16.6 (2025-11-20)

  • 优化 dcard 的 assets 注入方式
  • 新增 dcard 通过 JS 渲染

v0.16.5 (2025-11-14)

  • 修复 nginx redirect map 参数转换错误
  • 修复 vercel redirect 参数转换错误

v0.16.4 (2025-11-11)

修复

  • 模板传递对象 undefined 属性被转为 null 问题
  • 模板按后缀搜索时,必须是完整的文件名问题

优化

  • posts 列表默认排除当前文档
  • everkm::include()as 参数可省略,已从扩展名推断

v0.16.3 (2025-11-08)

  • 修复 breadcrumbs 无链接时去重问题

v0.16.2 (2025-11-03)

  • 修复 Vercel 配置导出问题
  • 修复查询参数 (Query String) 转换问题

v0.16.1 (2025-11-02)

新增

  • 内容自动 lint 与修复功能(--auto-fix-on-update
  • dCard 强制渲染开关(--ignore-dcard-errors
  • JS 模板渲染 (SSR) 支持
  • 文章列表返回 prev/next ID
  • 支持按 ID 获取文章详情(post_detail
  • 外部资源引用自动添加时间戳

修复

  • 修复渲染死锁问题
  • 修复 dcard 参数传递
  • 修复 dcard 调用

变更

  • 废弃从正文一级标题获取 title 的行为
  • 默认关闭 hash_storage
  • 切换元数据字段 dateupdated_at

v0.16.0 (2025-10-24)

新增

  • 目录级配置 DirConfigindex.yaml),支持多级合并继承
  • 面包屑导航自动注入
  • URL 重定向导出(支持 nginx 和 Vercel)
  • hash_storage 路径 fallback:长 slug 自动映射为短路径
  • 目录配置支持 query 查询参数
  • --title-selector 参数:自定义文章标题选取方式
  • --with-extend-md-meta 参数:导出扩展 Markdown 元信息

优化

  • 目录配置合并:子目录继承并覆盖父目录配置
  • 页面元数据解析:使用内置 metadata 解析器

v0.15.1 (2025-09-06)

  • 模板中增加 __theme_name 全局变量,表示当前主题名称

v0.15.0 (2025-09-06)

新增

  • __everkm/pages 目录支持独立于模板的补充页面
  • --with-url-map 参数导出 URL 映射文件
  • --with-publish-map 参数导出发布页面日志
  • 导出 nginx 可用的 url_map 文件
  • file_meta 子命令,读取单个文件的元信息
  • --template-path 参数导出模板路径
  • 支持导出 publish_map 输出
  • 增加模板注入 assets 功能

优化

  • 统一接口定义
  • 修正前端目录 fallback

v0.14.2 (2025-07-12)

  • 再次梳理 theme_dir 获取逻辑
  • 修改 theme-dev 模式下的 assets 复制与 fallback 规则

v0.14.1 (2025-06-25)

新增

  • --config 参数指定配置文件路径
  • --theme-dev 参数启用主题开发模式
  • 全局变量 __everkm_publish_version(当前工具版本号)
  • 全局变量 __theme_version(当前主题版本号)
  • 导出时支持相对 URL 计算
  • asset_base_url() 函数

优化

  • 导出时可使用软链接
  • 错误后直接退出,不再继续

v0.14.0 (2025-06-20)

新增

  • posts 函数增加 exclude_tags 参数,支持按标签排除文章
  • 标题降级策略:Meta 中未定义标题时,自动使用正文第一个 h1 作为标题
  • 内部链接优先按 slug 搜索
  • __env_is_preview 全局变量,标识当前是否为预览环境
  • 支持监听多个目录
  • assets 目录自动 fallback

修复

  • 修复内部链接解析问题
  • 修复排序问题
  • 修复 theme 缺失版本号
  • 避免标题提升(从正文 h1 获取标题时的边界情况)

v0.13.7 (2025-04-30)

  • 修复判断相对链接时忽略锚点问题

v0.13.6 (2025-04-30)

变更

  • 移除 OpenSSL 依赖
  • Sitemap 配置规则变更:多条规则选择其中一个匹配,而不是合并
  • glob 匹配规则调整:* 仅匹配一段路径,** 表示多级目录

新增

  • theme install --force 选项,强制覆盖安装主题
  • 显示安装的版本号

修复

  • 映射模板不允许使用相对路径
  • 修复测试用例以适应新的配置优先级

v0.13.5 (2025-04-26)

新增

  • nav_tree 函数,生成导航树
  • dir_tree 目录配置项
  • LinkItem 数据结构

修复

  • 修复面包屑检测
  • 修复 alias 路径查找
  • 修复路径查找问题
  • 修复 base_url 问题
  • 修复 TOC 标题关键词重复
  • 修复导航解析时忽略锚点
  • 修复复制 assets 目录不存在的情况

优化

  • base_url 增加 url 参数,自动转换 ~/ 打头的地址为 base_prefix
  • 优化链接比较方式
  • 增加目录排除功能
  • 增加链接抓取来源日志输出

v0.13.4 (2025-04-12)

  • 修复导出页面时样式丢失问题

v0.13.3 (2025-04-08)

  • 修复 dcard 数据与脚本优先从 __dcard 中读取
  • 修复 dcard 解析错误
  • 优化日志输出

v0.13.2 (2025-04-03)

  • 修复复制文件删除错误

v0.13.1 (2025-04-02)

  • 修复目录问题
  • 修复变量重命名
  • 调整打印输出

v0.13.0 (2025-04-02)

重大变更

以内容目录为一级目录,所有 everkm-publish 的相关配置统一放置到 __everkm 目录下。

重命名函数

  1. post_exist -> has_post
  2. media_local -> media_remote
  3. src -> media
  4. local_cfg -> config
  5. local_cfg_exist -> has_config
  6. get_random -> random
  7. get_env -> env
  8. assets -> asset
  9. ds -> data
  10. md_html -> md_to_html
  11. markdown_html -> markdown_to_html

目录结构变更

  • content 目录下内容放到一级目录,post 提升一级,扁平化
  • 所有 everkm 相关的都放到 __everkm 目录下

新增

  1. regex_replace 过滤器
  2. 全局变量 __host