模板项目mc-server-status和jieba等插件报错 fetch is not defined

系统信息

System:
OS: Linux 5.15 Armbian 23.08.0-trunk jammy 22.04 (Jammy Jellyfish)
CPU: (4) arm64 ARMv8 Processor rev 4 (v8l)
Binaries:
Node: 16.20.2
Yarn: 1.22.19
Koishi:
Core: 4.14.1
Console: 5.13.1

目前koishi.yml: pastebin (改掉隐私信息)

jieba报错例:

2023-08-14 12:22:53 [E] jieba 下载二进制文件遇到错误,请查看日志获取更详细信息              
2023-08-14 12:22:53 [W] app DownloadError: 
Failed to fetch from URL: fetch is not defined                               
at handleFile (/root/koishi/koishi-308/node_modules/koishi-plugin-jieba/lib/downloader.js:29:15)                                          
at getNativeBinding (/root/koishi/koishi-308/node_modules/koishi-plugin-jieba/lib/index.js:185:47)                                        
at Jieba.start (/root/koishi/koishi-308/node_modules/koishi-plugin-jieba/lib/index.js:50:35)                                              
at async /root/koishi/koishi-308/node_modules/cordis/lib/index.cjs:739:7

mc-server-status:

2023-08-14 13:10:31 [I] app unload plugin mc-server-status:uoo72b                           
2023-08-14 13:10:32 [I] app apply plugin mc-server-status:uoo72b                            
2023-08-14 13:10:44 [W] command mcs                                   
ReferenceError: fetch is not defined                                                            
at _Command.<anonymous> (/root/koishi/koishi-308/node_modules/koishi-plugin-mc-server-status/lib/index.js:36:22)                                                                       
 at Array.<anonymous> (/root/koishi/koishi-308/node_modules/@koishijs/core/lib/index.cjs:1686:27)                                          
at Object.argv.next (/root/koishi/koishi-308/node_modules/@koishijs/core/lib/index.cjs:1698:60)
at Object.argv.n
ext (/root/koishi/koishi-308/node_modules/@koishijs/core/lib/index.cjs:1698:60)
                            
at _Command.execute (/root/koishi/koishi-308/node_modules/@koishijs/core/lib/index.cjs:1701:33)                                   
  at runMicrotasks (<anonymous>)                                                         

at processTicksAndRejections (node:internal/process/task_queues:96:5)      
                                                         
at async /root/koishi/koishi-308/node_modules/@koishijs/core/lib/index.cjs:2287:22       
                                          
 at async _Session.withScope (/root/koishi/koishi-308/node_modules/@koishijs/core/lib/index.cjs:2155:22)

是缺失依赖吗?
请问怎么解决

1 个赞

是插件作者编写的插件有 bug,联系插件作者修复即可。

Ces deux plugins utilisent la nouvelle API que nous ne supportons toujours pas actuellement.
Une approche possible est d’atteindre l’auteur de ces plugins et d’exiger la réparation.

这两个插件使用了我们目前还不支持的新 API。
一种可能的方法是联系这些插件的作者并要求修复。

2 个赞

uhhhh
koishi-plugin-bilibili好像也有这样。。。
感觉请求网址的plugin都这样,蛮怪的(
我设置不像有误?
看起来更像koishi(?)js方面的的问题(fetch()全局变量提供商/require依赖有问题?)

1 个赞

是插件作者编写的插件有 bug,联系插件作者修复即可。

Si vous parlez du plugin koishi-plugin-bilibili, je pense que ce n’est pas le problème qui est décrit dans ce sujet.

如果您谈论的是插件koishi-plugin-bilibili,我相信这不是本主题中描述的问题。

1 个赞

请升级到 node 18,16-17 需要 node-fetch,我仅支持 Node 的 LTS 版本

4 个赞

Si vous ne supportez vraiment que certaines versions de node.js, vous devez ajouter un champ engines dans le package.json de votre plugin.

如果你真的只支持某些node.js版本,你应该在插件的package.json中添加一个engines字段。

De plus, le ctx.http est la méthode recommandée pour effectuer la requête HTTP, plutôt que de fetch.

2 个赞

我插件要求的 Koishi 版本往上也是默认 18 的,更新 Node.js 主版本 · Issue #17 · koishijs/boilerplate · GitHub
你可以考虑重新部署一下,或者自己更新下环境,我之后会添加 engines 字段
不过好像有些不是用官方集成整合包的,我有空换用 ctx.http 看看

4 个赞

此 issue 在 9 月 11 日前会被关闭。在此之前,上述提及的插件对 Koishi 用户来说属于不可用的插件。

2 个赞

其实两周前用官方整合包的时候就已经是 Node 18 了,我测试肯定用的是最新的包,但考虑到有些万年不更新的,我会换 ctx.http 来保证全版本兼容的

2 个赞

我查看了官方整合包的发布页面,发现官方只提供了 Node 16 的版本。尚不清楚官方目前对此事的推进进度,不过基于 Node 16 的整合包在 Node 18 上使用当然是没有问题的。

目前我个人对开发者的建议仍然是支持 Node 16,不过开发者可以根据自己的偏好进行选择,毕竟距离 Node 16 结束支持也只剩一个月了。

2 个赞

是在留缓冲期,
图片
不过就我而言唯一不兼容的就这个 fetch,也没有其他需要改的,还能支持下旧版本,何乐而不为

3 个赞

发生什么事了

1 个赞

还有,您是k-p-jieba的开发者对吧?
同一环境下,我在启用jieba(包括启动时自动apply)时,整个koishi会阻塞一段时间(即使已经下载完毕jieba依赖),web访问一直加载
若此时Ctrl+C终止koishi,会有node进程仍占用5140(默认)端口,可以kill -9杀掉,若想加载其他插件,需要koishi.yml禁用jieba。
此问题是否为我的环境问题?

1 个赞

没遇到过,Ctrl+C 终止 koishi 我这边直接消失了,不过看起来你在 Linux 系统下操作,考虑到 jieba 为了追求高性能使用了 GitHub - napi-rs/node-rs: Node.js bindings ❤️ Rust crates 的 native 绑定二进制文件,可能性有很多,试试 https://www.npmjs.com/package/why-is-node-running

关于阻塞,这个我倒是有,但不会超过 2s,如果你在性能羸弱的机子上跑可能比较明显,但我认为这相当正常,jieba 要加载庞大的词典,require 一个二进制文件对 nodejs 来说永远是主线程进行

1 个赞

试试 0.2.6 会不会有所缓解,现在不再等待 ready

1 个赞

hhh好的我更新下,E900V22C arm64电视盒子,1.9Ghz

1 个赞