这个cache是不是应该放在if的外面,不然有可能和历史的文章重复?
https://github.com/ohroy/hexo-abbrlink/blob/70f112b4caa16f956935534c3ffb4231ee5a30ed/lib/logic.js#L61
感觉是需要old_cache和new_cache分开,然后在写入文件前再判断下old_cache中有没有。
没太看明白😂,大佬可以举个例子吗
没太看明白😂,大佬可以举个例子吗
@yqs112358 大概这个意思,写的可能不太准确,但意思差不多
let generateAbbrlink = function (data) {
...
...
// calc abbrlinks
if (!abbrlink || abbrlink == '0' || config.force) {
...
...
model.cacheNewPostAbbrlink(data.source, abbrlink) // 如果是新文章,缓存到new_cache
} else {
model.cacheOldPostAbbrlink(data.source, abbrlink) // 旧文档,缓存到old_cache
}
}
let writebackToFiles = function (data) {
...
...
// avoid rewrite front-matter if the same abbrlink exists
let abbrlink = model.getNewPostAbbrlink(data.source)
if(!abbrlink)
return data;
// 新文章时,判断旧文档中是否已经有相同的link,如果有就再生成直到不重复
abbrlink = model.uniqueAbbrlinkByOldCache(abbrlink);
...
...
}
喔,这边确实疏忽了,我看着改一下,感谢兄弟👍
https://github.com/hexojs/hexo/issues/5583 发了帖子问遍历posts,几天都没人鸟🫠话说哥们这方面有思路没 @Asutorufa
我的想法是,尽量在post_permalink里面就确定好abbrlink,避免到后面的before_post_render阶段再更新,这样应该比较符合语义。
但是这样的话需要在post_permalink及以前先遍历所有的posts来统计已存在的abbrlinks,目前还没找到合适的方法。。。hexo这API设计的也有点一言难尽
@yqs112358
我也不太熟悉这个流程,看了filter的文档,感觉写的模棱两可。 不过也许可以像这位兄弟一样直接操作db.json,反而更直观一点。 也不需要对db.json进行写操作,只需要拿到里面的历史文章的内容。
确实哈,我看一下 应该还可以。唯一的缺点是hexo clean之后第一次generate扫描不到这个db,如果这时候新增文章的话就可能碰到冲突。另外如果front-matter和DB里面不一致也会出现问题 都怪hexo这接口设计的。。。。唉
@Asutorufa 哥们试一下?现在应该没问题了 https://github.com/ohroy/hexo-abbrlink/pull/77
merged