为什么 Koishi 初次运行后会自动为插件配置添加 id

如题,例如从样板项目中启动的话,配置文件会从

plugins:
  group:server:
    server:
      port: 5140
      maxPort: 5149
...

变为以下内容(加上了 :jhyjuq 这样的 id)

plugins:
  group:server:
    server:jhyjuq:
      port: 5140
      maxPort: 5149
...

提出问题的原因仅仅因为配置文件中加上随机ID后可读性有些差 :sob:

1 个赞

不全面的一点解释:
koishi是可以存放多个配置的,如果不加ID的话,各种配置会乱作一团

3 个赞

二楼说的没错,如果没有 id 你就不能创建两个插件组或者在一个插件组装两个相同插件了(

v5 的新配置文件格式会把 name 和 id 分开写,可能会稍微提高可读性,具体可以看 v5 预告贴。

3 个赞

明白了。
但是可不可以通过 uid=${parent.uid}:${plugin.name}:${plugin.id} 类似这样的值来识别不同的插件,
即某个插件的唯一识别值(uid) = 父节点的 uid + 插件名 + 插件 id。
这样的话,配置文件就不一定需要加上随机ID。

1 个赞

那你的插件 id 还是得有啊。同一个父级下可以有两个相同插件名的。

1 个赞

我的意思是 id 可以为空,比如以下配置就没问题

plugins:
  group:basic:
    admin: {}
    bind: {}
  group:adapter:
    adapter-qq: {}
    adapter-qq:cecilia: {}

就算 id 为空,也可以根据原有插件名和父节点的信息来识别,不会那么容易出现”重复“的情况

但是像以下配置就肯定会抛出错误,或者为第二个重复插件自动添加id

plugins:
  group:adapter:
    adapter-qq: {}
    adapter-qq: {}

理想以上配置在运行后会自动更新为以下内容:

plugins:
  group:adapter:
    adapter-qq: {}
    adapter-qq:jhyjuq: {}

并且在控制台中打印警告信息:检测到插件 group:adapter.adapter-qq 重复,已自动更名为 group:adapter.adapter-qq:jhyjuq

2 个赞

问题是这个配置文件是自动生成的,并没有打算让用户写这个,因为会造成很多问题:

  • 这个 ID 本身是一种永久链接(permalink),在「插件管理」页面中,你可以随意拖动插件或重启实例,这个插件的详情页的链接都不会发生变化;如果可以为空就不能基于 ID 分发永久链接,届时插件管理就无法方便地进行链接分享和持久化等工作。

  • 如果允许用户编辑这里的部分,本身就需要考虑用户在里面插入特殊字符的问题,例如空格、冒号和 @ 等等;目前的做法是有一个专门的 $label 属性用于编辑显示名称(你试试在插件上右击重命名),如果利用这里的 ID 那么既限制了用户的操作,又徒增了隐患。

2 个赞

好吧,明白了

1 个赞