PicGo / PicGo-Core

:zap:A tool for pictures uploading. Both CLI & API supports.
https://picgo.github.io/PicGo-Core-Doc/
MIT License
832 stars 84 forks source link

[API 咨询] 插件升级中遇到的问题 #138

Closed d-w-x closed 1 year ago

d-w-x commented 1 year ago

你好,我现在试图将 https://github.com/d-w-x/picgo-plugin-gitlab-files 升级到最新版本。目前在接口中可能会遇到问题,希望能得到您的回复。

d-w-x commented 1 year ago

IPluginConfig 中 prefix、 propName 这两个参数是什么含义,我在文档中没有看到相关说明?

d-w-x commented 1 year ago

ctx.getConfig<[ConfigType]>('picBed.[uploaderName]') 中,获取的配置值在设置了默认值后仍然可能为空。

例如指定了:

const pluginConfig: IPluginConfig[] = [
                        {
                name: 'fileName',
                type: 'input',
                default: userConfig.fileName || '/pictures/{year}/{month}/{day}_{hour}_{minute}_{second}_{fileName}',
                required: false,
                message: 'upload file name and path',
                alias: '文件名及其路径'
            }
]

如果用户配置的值为空,那么 ctx.getConfig<[ConfigType]>('picBed.[uploaderName]').fileName 中取到的值是空而不是 '/pictures/{year}/{month}/{day}_{hour}_{minute}_{second}_{fileName}',我认为这个不符合预期?

影响版本: windows GUI 2.3.1 CLI 1.5.0

Molunerfinn commented 1 year ago

prefix只会在cli命令中出现,在cli配置里会使用到。你如果使用了prefix,在命令行配置你的插件的时候,每个配置项前面会出现prefix的内容。 [propName: string]: any 意思是还可以自行添加一些属性名为string类型的,值为any类型的值。并不是要声明一个叫做 propName 的属性。参考

Molunerfinn commented 1 year ago

符合预期,pluginConfig 需要第一次用户保存并落地才能生效。

getConfig的时候只会从本地配置中读取,而不会从pluginConfig中读取。

Molunerfinn commented 1 year ago

prefix的用法,可以参考picgo-core内置的一些图床的使用方法,你可以在命令行中配置一遍就能理解作用。简单来说, alias 是为了在 GUI 中展示可变的属性名,而 prefix 是为了在命令行中展示可变的属性名。命令行展示主要可以参考 Inquirer.js 的配置。

https://github.com/PicGo/PicGo-Core/blob/dev/src/plugins/uploader/tcyun.ts#L207

后续会更新到文档中,谢谢反馈。

d-w-x commented 1 year ago

实际上个人觉得 aliasprefix 可能有些冗余,正是因为看已有的图床发现 prefix 一般为 [缺失]或者 [和 alias 值相同],故而特意来咨询。

d-w-x commented 1 year ago

所以 pluginConfig 主要是影响用户没有初始值的时候保存进去的内容;后面读取配置还是要自己处理空值,如果不允许空值的话。

可以这么理解吧?

d-w-x commented 1 year ago

注意到升级到 1.5.0 后,新插件应该是不能在 < 1.5.0 版本使用的,因此是否可能可以考虑允许用户在安装插件的时候指定版本,这样他们在使用旧版本软件的时候可以根据插件的兼容性说明(如果插件提供)来安装历史插件版本?

Molunerfinn commented 1 year ago

注意到升级到 1.5.0 后,新插件应该是不能在 < 1.5.0 版本使用的,因此是否可能可以考虑允许用户在安装插件的时候指定版本,这样他们在使用旧版本软件的时候可以根据插件的兼容性说明(如果插件提供)来安装历史插件版本?

GUI版本后续会更新一个功能,安装插件的时候可以选择安装某个版本的插件。

对于用户来说,如果是旧版的用户,那么需要手动到插件目录下安装指定的插件版本。

后续会在插件的package.json中,申明一个字段用于标识最低支持的PicGo版本,这样在安装前就能知道能否安装。

Molunerfinn commented 1 year ago

实际上个人觉得 aliasprefix 可能有些冗余,正是因为看已有的图床发现 prefix 一般为 [缺失]或者 [和 alias 值相同],故而特意来咨询。

这是历史原因导致的。当然后续也可能直接做breakingchange,把 alias 废弃。因为 prefixInquirer.js 的配置,PicGo 的 CLI 需要它的支持,同时也比较推荐使用它的配置项,这样后续做迁移等也会比较方便。 而 alias 只是我自己拍脑门想的一个属性,用于对 GUI 界面做优化而处理的。

d-w-x commented 1 year ago

嗯嗯,我这边适配好了应该,其他基本没问题了,麻烦了。

Molunerfinn commented 1 year ago

所以 pluginConfig 主要是影响用户没有初始值的时候保存进去的内容;后面读取配置还是要自己处理空值,如果不允许空值的话。

可以这么理解吧?

是的,pluginConfig 如果有默认值,那么用户在第一次打开配置界面的时候就能看到默认值,从而点击保存的时候就能将默认值落地。但是直接读取的时候始终是从落地的配置文件中读取的,不会再调一次插件。毕竟有可能存在一些配置不在插件中或者插件不存在的情况。

Molunerfinn commented 1 year ago

嗯嗯,我这边适配好了应该,其他基本没问题了,麻烦了。

非常感谢你为 PicGo 生态做的贡献!

d-w-x commented 1 year ago

没事,也非常感谢你开发的软件以及及时回复~