[RFC] 插件自动开启策略
- Dominant language
- TypeScript
- Stars
- 19k
- Forks
- 1.8k
- PR merge metrics
- No merged PRs in 30d
Description
## 问题
如果引入一个框架未内置的插件,需要两个步骤
1. 安装模块
2. 配置 plugin.js
```js
exports.pluginName = {
enable: true,
package: 'plugin-module-name'
};
```
这样会有两个问题
1. 对使用者不太友好,直观的感觉是:我安装了就自动开启了
2. 有些新插件,暂时没有在框架内置,会让用户自己引入。后面可能插件又被框架引入了,这个时候让用户修改 plugin.js 也很难描述「你去把那个 package.json 里删掉,把 plugin.js 里的 package 删掉」
## 建议
一句话说:插件只要安装了,默认就会被加载,开启的话还是在 plugin.js 里,只是不用配置 package 了
具体做法:
1. egg-loader 在加载插件的时候,先找到应用以及它涉及的框架 app -> framework a -> framework b -> egg 目录
2. 按顺序读取应用和它的框架的 package.json -> dependencies 列表,然后 resolve 列表中的模块,找到它们的 package.json,从它们的 package.json 中找到 eggPlugin 节点,完成插件的加载,这里加载到的插件都是默认~~开启~~关闭的
3. 根据老的插件加载策略,读取 plugin.js,用它来覆盖第二步得到的结果
## 风险
~~目前想到的一个风险就是:应用可能自己安装了一些没用的插件,默认就被开启了,但这个问题可以在开发阶段给与一些提示~~
新的方案,只是增加了一个 auto load 过程,对于老的方式是兼容的
Contributor guide
Assessment
This issue has not been assessed yet.