|
1 | 1 | 'use strict'; |
2 | 2 |
|
3 | 3 | const chainConfig = require('./service/chainConfig'); |
4 | | -const silentService = require('./utils/silentService'); |
5 | | -const { BUILT_IN } = require('./constants'); |
| 4 | +const service = require('./utils/createService'); |
6 | 5 |
|
| 6 | +let IPLUGIN_ID; |
7 | 7 | module.exports = function(api, vueConfig) { |
8 | 8 | if (api.$isMicroAppPluginAPI) { // micro-app plugin |
9 | 9 | const registerMethod = require('./utils/registerMethod'); |
10 | 10 | registerMethod(api); |
11 | | - // 重写 |
12 | | - api.extendMethod('resolveWebpackConfig', { |
| 11 | + IPLUGIN_ID = api.id; |
| 12 | + } else { // vue-cli plugin |
| 13 | + const plugin = IPLUGIN_ID ? service.findPlugin(IPLUGIN_ID) : service.plugins[0]; // 随便取个plugin |
| 14 | + const _mapi = plugin[Symbol.for('api')]; |
| 15 | + |
| 16 | + // 重写 resolveWebpackConfig |
| 17 | + _mapi.extendMethod('resolveWebpackConfig', { |
13 | 18 | description: 'resolve webpack config.', |
14 | 19 | override: true, |
15 | 20 | }, webpackConfig => { |
16 | | - const finalWebpackConfig = api.applyPluginHooks('modifyWebpackConfig', webpackConfig); |
17 | | - api.setState('webpackConfig', finalWebpackConfig); |
| 21 | + const finalWebpackConfig = _mapi.applyPluginHooks('modifyWebpackConfig', webpackConfig); |
| 22 | + _mapi.setState('webpackConfig', finalWebpackConfig); |
18 | 23 | return finalWebpackConfig; |
19 | 24 | }); |
20 | | - } else { // vue-cli plugin |
21 | | - silentService(service => { |
22 | | - // 注册插件 |
23 | | - service.registerPlugin({ |
24 | | - id: 'vue-cli-plugin:plugin-modifyVueConfig-apply', |
25 | | - [BUILT_IN]: true, |
26 | | - apply(_api) { |
27 | | - // 修改默认配置 |
28 | | - _api.onInitDone(() => { |
29 | | - const newVueConfig = _api.applyPluginHooks('modifyVueConfig', vueConfig); |
30 | | - Object.assign(vueConfig, newVueConfig || {}); |
31 | 25 |
|
32 | | - return chainConfig(api, vueConfig, _api); |
33 | | - }); |
34 | | - }, |
35 | | - }); |
| 26 | + // 修改默认配置 |
| 27 | + const newVueConfig = _mapi.applyPluginHooks('modifyVueConfig', vueConfig); |
| 28 | + Object.assign(vueConfig, newVueConfig || {}); |
36 | 29 |
|
37 | | - // 加载获取所有配置 |
38 | | - return service.initSync(); |
39 | | - }); |
| 30 | + chainConfig(api, vueConfig, _mapi); |
| 31 | + |
| 32 | + // 覆盖逻辑 |
| 33 | + const originaFn = api.resolveWebpackConfig; |
| 34 | + api.resolveWebpackConfig = function(chainableConfig) { |
| 35 | + return _mapi.resolveWebpackConfig(originaFn.apply(api, chainableConfig)); |
| 36 | + }; |
40 | 37 | } |
41 | 38 | }; |
0 commit comments