bisheng
bisheng copied to clipboard
config of plugin need support complex object
suck as
const config = {
base: {
exclude: ['children'],
},
i18n: {
'en-US': {
columnNames: [
{
label: 'Property',
key: 'name',
},
{
label: 'Description',
key: 'description',
},
{
label: 'Type',
key: 'types',
},
{
label: 'Default',
key: 'default',
},
],
},
},
};
although we can use trick,such as base64
有比较好的 API 设计形式吗?我这边希望的是:
- 能够比较清晰的在
themeConfig
中知道是哪个 plugin 的 config,作用域明确; - 现在的 plugin 是基于 path 去拿的,相当于没有 id,这个可能是区分 config 作用域会遇到的一个阻力;
- 另一点就是,新的设计如何不 break,是不是能够只做一个语法糖类型的东西。
有比较好的 API 设计形式吗?我这边希望的是:
- 能够比较清晰的在
themeConfig
中知道是哪个 plugin 的 config,作用域明确;- 现在的 plugin 是基于 path 去拿的,相当于没有 id,这个可能是区分 config 作用域会遇到的一个阻力;
- 另一点就是,新的设计如何不 break。
我随便举一个例子。
const plugins = [
{
config: {},
use: "bisheng-plugin-xxx"
}
];
因为 bisheng 的配置是用 js 文件写的,config 里面用户可以随便怎么写,怎么传都可以。 如果不要 break,只需要解析的时候用 typeof 判断一下 config 是否是一个对象。如果是字符串则用原来的方法,如果是对象则用新的方法。 我现在使用的方法很 trick
配置的时候
`bisheng-plugin-typescript-interface?encodeConfig=${Buffer.from(
JSON.stringify(bishengPluginTypescriptInterfaceConfig),
).toString('base64')}`
解析的时候
const pluginTableConfig = JSON.parse(
Buffer.from(encodeConfig, 'base64').toString()
);
你关联的 antd 的 pr 我看到了,我反而觉得现在 trick 的实现也不错。 按你的这个设计走的话,如果这么写的话,算非法行为吧。
const plugins = [
{
config: {a: 'b'},
use: "bisheng-plugin-xxx?a=b"
}
];