zhamao-robot / zhamao-framework

协程、高性能、灵活的聊天机器人 & Web 开发框架(炸毛框架)
https://framework.zhamao.xin
Apache License 2.0
158 stars 26 forks source link

3.0 对于不同类型插件的支持和加载方式 #183

Closed crazywhalecc closed 1 year ago

crazywhalecc commented 1 year ago

描述

插件支持

目前 3.0 计划首先支持 2 种插件和 3 种加载方式,为:

疑问

  1. 有关单文件模式,那个单例文件要规定名称吗,因为遍历目录有可能会获取到多个文件,到底加载哪个单文件呢?或者也要求 zmplugin.json 文件,且必须指定入口文件名称?
  2. 单文件模式要不要也尝试加载 Composer 的自动加载?
  3. 插件目录模式,在检测不到 composer.json 的情况下,要不要报警?
  4. 原先的 source 模式,需不需要支持 zmplugin.json 插件形式,因为我觉得 source 模式再支持插件形式会特别混乱?
  5. 怎么支持外部插件的引入,例如像 Go 一样从 GitHub、从 Composer require 引入、下载到 plugins 目录的 phar 插件?

例子

No response

sunxyw commented 1 year ago

我认为其实可以把两种方式统一为一种?以单文件为主。 关于加载问题,我们可以统一约定一种命名,例如以 Plugin 结尾,或者在 composer.json 内指定( extra 字段)。 如果用户希望以多文件进行开发,可以在原单文件中添加一个开关或选项。

本地引入或开发方面,我有两种想法: 提供一个加载插件的方法,参数为插件入口类,用户可以直接调用来加载。 用户在 composer.json 中通过添加 repositories 字段,将本地插件视为正常 Composer 插件使用。

这样的话应该可以较好地方便同时兼容本地和 Composer 插件?

我不太支持把 Source 视为插件,感觉会相当混乱。


From: Jerry @.> Sent: Sunday, December 18, 2022 2:55:30 PM To: zhamao-robot/zhamao-framework @.> Cc: sunxyw @.>; Assign @.> Subject: Re: [zhamao-robot/zhamao-framework] 3.0 对于不同类型插件的支持和加载方式 (Issue #183)

Assigned #183https://github.com/zhamao-robot/zhamao-framework/issues/183 to @sunxywhttps://github.com/sunxyw.

― Reply to this email directly, view it on GitHubhttps://github.com/zhamao-robot/zhamao-framework/issues/183#event-8063462840, or unsubscribehttps://github.com/notifications/unsubscribe-auth/AHR25LWAVIVV2L3XPHVQD4DWN2YOFANCNFSM6AAAAAATCLTVMM. You are receiving this because you were assigned.Message ID: @.***>

sunxyw commented 1 year ago

要不干脆弄个投票让他们选得了


From: sunxyw @.> Sent: Sunday, December 18, 2022 3:56:11 PM To: zhamao-robot/zhamao-framework @.>; zhamao-robot/zhamao-framework @.> Cc: sunxyw @.>; Assign @.***> Subject: Re: [zhamao-robot/zhamao-framework] 3.0 对于不同类型插件的支持和加载方式 (Issue #183)

我认为其实可以把两种方式统一为一种?以单文件为主。 关于加载问题,我们可以统一约定一种命名,例如以 Plugin 结尾,或者在 composer.json 内指定( extra 字段)。 如果用户希望以多文件进行开发,可以在原单文件中添加一个开关或选项。

本地引入或开发方面,我有两种想法: 提供一个加载插件的方法,参数为插件入口类,用户可以直接调用来加载。 用户在 composer.json 中通过添加 repositories 字段,将本地插件视为正常 Composer 插件使用。

这样的话应该可以较好地方便同时兼容本地和 Composer 插件?

我不太支持把 Source 视为插件,感觉会相当混乱。


From: Jerry @.> Sent: Sunday, December 18, 2022 2:55:30 PM To: zhamao-robot/zhamao-framework @.> Cc: sunxyw @.>; Assign @.> Subject: Re: [zhamao-robot/zhamao-framework] 3.0 对于不同类型插件的支持和加载方式 (Issue #183)

Assigned #183https://github.com/zhamao-robot/zhamao-framework/issues/183 to @sunxywhttps://github.com/sunxyw.

― Reply to this email directly, view it on GitHubhttps://github.com/zhamao-robot/zhamao-framework/issues/183#event-8063462840, or unsubscribehttps://github.com/notifications/unsubscribe-auth/AHR25LWAVIVV2L3XPHVQD4DWN2YOFANCNFSM6AAAAAATCLTVMM. You are receiving this because you were assigned.Message ID: @.***>

crazywhalecc commented 1 year ago

我其实个人并不太赞成啥都往composer.json里面塞,因为我觉得 Composer 最多就是管理依赖为主,一些自动化的东西也可以,如果什么元信息都写到 composer.json 会造成一定的混乱,而且有的插件单文件甚至根本不需要 autoload。

另,我觉得要么就全都要,单文件插件的入口文件,如果在 zmplugin.json 指定 main 字段,那就 require $meta['main'],否则就依次尝试插件目录下的 main.phpentry.php

多文件的话,就直接 autoload 下,然后将 plugins 子目录下的 autoload.psr-4 作为加载注解事件的文件夹?

sunxyw commented 1 year ago

我其实个人并不太赞成啥都往composer.json里面塞,因为我觉得 Composer 最多就是管理依赖为主,一些自动化的东西也可以,如果什么元信息都写到 composer.json 会造成一定的混乱,而且有的插件单文件甚至根本不需要 autoload。

另,我觉得要么就全都要,单文件插件的入口文件,如果在 zmplugin.json 指定 main 字段,那就 require $meta['main'],否则就依次尝试插件目录下的 main.phpentry.php

多文件的话,就直接 autoload 下,然后将 plugins 子目录下的 autoload.psr-4 作为加载注解事件的文件夹?

可以