问题描述
nodebb 插件管理中,搜索不到升级后的插件 nodebb-plugin-newyear-niuniu,如图
分析定位
通过源码分析,可以看到 nodebb 搜索插件 调用的是/api/admin/extend/plugins 接口,/api/admin/extend/plugins 又调用了官方接口 https://packages.nodebb.org/api/v1/plugins?version={nodebbversion};
- version < 1.13.4
当version小于 1.13.4的时候,获取不到 nodebb-plugin-newyear-niuniu 插件,
- version >= 1.13.4
当version小于 1.13.4的时候,可以获取到 nodebb-plugin-newyear-niuniu 插件
可以看到,搜索结果和version 相关,一通查询后,找到了该api项目的源码nodebb-package-manager
getPlugins时,先根据nodebb 的version 从系统缓存中获取,缓存中没有,再去redis中根据"packages:{version}"获取对应的插件包,如果没有版本号,则通过"packages" 获取所有插件
结合上面 version < 1.13.4时,获取不到该插件,说明redis中 "packages:1.13.3" 等符合条件的key中,没有该插件,由此需要定位redis数据写入的问题
项目中通过定时任务的方式,sync npm 上的package,sync后的包,根据nodebb的version进行存储,versions通过 https://api.github.com/repos/nodebb/nodebb/tags?per_page=100000 获取,
解析后的versions如下,这就解释了为什么1.13.4以下获取不到升级后的插件
[
'1.17.0', '1.16.2',
'1.16.1', '1.16.0',
'1.15.5', '1.15.4',
'1.15.3', '1.15.2',
'1.15.1', '1.15.0',
'1.14.3', '1.14.2',
'1.14.1', '1.14.0',
'1.13.4'
]
那为什么github的api没有返回所有的tag呢?
官方文档 有两个参数,per_page,page,而nodebb-package-manager 只使用的per_page参数,而per_page的max是100,这样就导致获取不到我们想要的tags
通过加page参数验证以上,如图,可以获取到1.13.0
到这里,用我的中式英语给大佬提了个issue,希望他能快点改了