eggjs / eggjs/egg

[RFC] 插件自动开启策略

Open
#2,643 14 comments 0 reactions 1 assignee Claimed by @popomore View on GitHub
type: discussion type: proposals
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

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.