这是一篇教你如何正确迁移你的 koishi 的文章,会涵盖同平台、不同平台之间等方式,你可以结合自身情况进行操作;同时,这是一篇 Wiki,如果文章有错漏欢迎修订。
平台
此处所说的「平台」指的是不同的操作系统,在真正开始迁移之前,我们需要了解不同「平台」的差异,以及大概知晓 Koishi 的运行方式,这样才会在迁移时不至于发生各种问题。
平台差异
首先,目前主流的操作系统有这些:
- Windows
- MacOS
- Linux(这里泛指基于 Linux 内核的各发行版)
- Android
iOS
而不同平台运行在不同处理器架构下又会产生一点区别,这里又可以分为「x86_x64」与「ARM」等不同的处理器架构。
我们不需要细究这些有什么区别,我们只需要明确一个概念:平台与平台之间是有区别的。
「跨平台」的 Koishi
Koishi 是一个运行在 NodeJs
上的一个机器人框架,得益于 NodeJs 本身的特性, Koishi 框架本身是「跨平台」的。当然,你发现这里仅说了 Koishi 本身是跨平台的,那 Koishi 的「插件」是怎么一个情况呢?这是因为不同插件可能使用了特定平台的代码,或者调用了只能运行在特定平台的程序。
到此,你又得到了一个概念:Koishi 本身是跨平台的,但插件可能不是。
好了,带着这两个概念,我们可以试着开始了:
开始
Tips: 迁移操作目前来说会在 Koishi Desktop 以及 Koishi Andoird 之外操作 Koishi,这是不受「Koishi 用户交流群」客服支持的方法,你可以在论坛中交流,不要试图在用户群触发「308状态」。
目前来说,Koishi 有多种安装方式:
- 启动器
- Koishi Desktop
- Koishi Android
- 容器(例如 Docker)
- 模板项目(进阶)
- Koinix (WIP)
其中,「启动器」与「容器」都是基于模板项目并大大简化操作的安装方式,在「启动器」中「实例」所指的就是单个模板项目,因此我们迁移时本质是在迁移这个「模板项目」。
同平台迁移
根据之前的了解,我们知道不同平台之间是有差异的,但是如果只是从这台 Windows PC 迁移至另外一台 Windows PC 的话,就不存在差异了,因为这本来就是相同的两个平台(废话),因此迁移方式十分简单:复制粘贴。这里讲讲不同安装方式的迁移方法:
启动器
启动器的数据文件根据 kd 与 ka 有不同的位置,你可以看看以下文章了解数据目录:
在 kd 中,选择「高级 - 打开数据文件夹」后在文件夹中复制 default
文件夹或者压缩 default
文件夹,并将实例迁移至目标机器上(记得解压)。
注意:请牢记平台与平台之间是有区别的,如果你想从 Koishi Desktop for Windows 迁移至 Koishi Desktop for Linux,你不应该简单的复制粘贴,这会导致部分插件出现问题。
在 ka 中,你可以选择「导出整合包」,然后在你的目标手机的 ka 上选择「导入整合包」。
容器
这是一个需要修订的内容,不保证正确性
容器之间的迁移十分简单,每个镜像都是单文件,你只需要导出然后在目标平台导出即可。
跨平台迁移
不同平台之间是有区别的(×N),当你想迁移 Koishi 到不同平台时,需要注意插件可能会不工作。
Koishi Desktop
当使用 Koishi Desktop 在 Windows、MacOS、Linux 之间跨平台迁移时,首先需要根据上文「同平台迁移」中所讲的将 default
文件夹迁移至目标平台的 Koishi Desktop 数据文件夹中,并进行如下操作:
点按通知区域的 Koishi 桌面图标,然后选择「高级 - 打开 Koishi 控制台」。在控制台中输入如下命令:
koi --debug yarn -n default install --no-lockfile
这是来自 Koishi Desktop 的高级操作,具体可以看:
Koishi Desktop 与 Koishi Android
还记得那个概念吗?desktop 与 android 所处的平台依旧是不一样的。当你从 Koishi Android 迁移至 Koishi Desktop 时,你需要如下步骤:
- 在 Koishi Android 中点击「导出整合包」
- 将整合包导入数据文件夹并解压重命名为
default
或者其他名字
- 点按通知区域的 Koishi 桌面图标,然后选择「高级 - 打开 Koishi 控制台」。在控制台中输入如下命令:
koi --debug yarn -n default install --no-lockfile
当你从 Koishi Desktop 迁移至 Koishi Android 时,你需要如下步骤:
- 进入
default
文件夹,并进行压缩操作 - 将压缩包通过「导入整合包」导入到 Koishi Android中
- 卸载并重新安装出现问题的插件
Q&A
-
为什么不介绍 「模板项目」的迁移方式?
这是开发者使用的进阶方法,文章假定开发者已经完全理解了 node、包管理等知识,有能力自己处理不同平台下依赖、patch 等问题。
-
为什么不介绍 「koinix」的迁移方式?
这是 Koishi 之神 Anillc 在 nix 理念下的一个「Koishi 发行版」,这个需要有 nix 以及 linux 中级知识。
-
为什么有些插件无法跨平台?
因为一部分插件依赖了特定平台的代码或程序,以
gocqhttp
插件为例,这个插件依赖了名为 go-cqhttp 的程序,go-cqhttp 有针对不同平台的二进制文件,它无法跨平台。因此,比如当你将 Koishi Desktop for Windows 复制到 Koishi Desktop for Linux 同时会将 go-cqhttp.exe 一并复制过去,而.exe
文件无法在 Linux 下运行,会导致 Koishi 无法启动 gocq 导致出现 「正在启动 gocqhttp 子进程…」的问题(这来自一个真实案例,也是写本文章的原因之一)。 -
为什么从 Koishi Desktop 迁移至 Koishi Android 后只能重装不能用的插件?
因为目前 Koishi Android 没有更新依赖的解决方案,你可以前往 Koishi-Android 仓库提交 issue 或 fork 并添加功能后发起 PR。