Candinya / Kratos-Rebirth

一个可爱而现代的 Hexo 主题
GNU General Public License v3.0
638 stars 79 forks source link

Bug 回报:Hexo生命周期事件与主题注入代码的冲突 #56

Closed Candinya closed 2 years ago

Candinya commented 3 years ago
  1. 对Bug的描述: 在Hexo的生命周期中,主题代码注入与配置读取是同步进行的;本主题虽然目前使用的是processAfter并且没有使用once限制来暴力注入以提升可靠性,但这种方式(尤其是一些比较消耗资源的操作)无疑会导致严重拖累Hexo的性能。目前我们还在研究相关的解决方案,单纯使用once单次调用并不可靠(很有可能导致构建爆炸),使用ready事件则直接爆炸(好像没有被调用?)

  2. 复现Bug的方法: 暂无

  3. 期望的行为: 正确构建,并且支持将配置文件迁移到站点文件夹下

  4. 相关的截图: image

  5. 运行环境(如果该Bug的产生和环境有关,例如浏览器不兼容导致): Github CI:构建成功 CloudFlare Pages:构建失败

  6. 补充内容: https://github.com/hexojs/hexo/blob/92b979f4a3fa8714aebd3d11c3295d466b870905/lib/hexo/index.js#L239-L248 image

Candinya commented 3 years ago

已知的问题:

  1. 导致友链页面和搜索页面在使用外部配置文件 (_config.kratos-rebirth.yml) 的情况下无法生成 已经解决
Candinya commented 3 years ago

2. 即使把配置文件放到里面去了,也会导致站点构建时候出现各种怪问题,例如我站现在文章底部的内容丢失掉了 = =

看来这个导致的问题非常严重了

修正:这个是由 Node 版本导致的,旧版不支持 ?. 操作符,建议升级到 v16 及更新的版本。

Candinya commented 2 years ago

暂时关闭该 issue ,有什么进展会再开启

ArcticLampyrid commented 2 years ago
  1. 使用ready事件则直接爆炸(好像没有被调用?)

需要使用 hexo.on 而不是 hexo.theme.on 另外似乎使用generateBefore event才能保证config被完整加载

request to reopen this issue

Candinya commented 2 years ago
  1. 使用ready事件则直接爆炸(好像没有被调用?)

需要使用 hexo.on 而不是 hexo.theme.on 另外似乎使用generateBefore event才能保证config被完整加载

request to reopen this issue

好的,我试试 🎉

Candinya commented 2 years ago

成功了!非常感激 💖

ArcticLampyrid commented 2 years ago

直接这么做貌似有个问题 friends.js过程生成过程似乎会调用url_cdn 但是在generateBefore生成的话,这个cdn helper似乎不会被调用(可能和某些流程的顺序有关) 导致相关tag没被解析出来 这会导致没有指定头像的友联无法显示默认头像

image