[Question] 针对cli service中chainWebpack执行的疑问
screetBloom opened this issue · comments
冒昧再请教一下
Background
在我们写service插件的时候会使用Api.chainWebpack
去链式的修改我们的webpack配置
比如you尤大在vue-cli/packages/@vue/cli-plugin-typescript/index.js
中写的一样
我们可以看到这个插件中其实就调了一个Api.chainWebpack
,看起来最终插件也成功的链式修改了webpack的配置
Question
从源码来看,这个现象很不科学
PluginApi中Api.chainWebpack
只是把要执行的回调push到了一个数组中,并没有去执行:代码
最终执行时机是在Service.js/resolveChainableWebpackConfig
这一层:
但是resolveChainableWebpackConfig
在Service.js其实只会在resolveWebpackConfig
中执行
而整个cli-service启动过程中resolveWebpackConfig
只会在插件实例中通过Api.resolveWebpackConfig
去调用
也就是说根据源代码来看写插件的时候仅仅只有Api.chainWebpack
是不会生效的
但是可以看到我在上面【背景】中贴出来的图,尤大他们在vue-cli/packages/@vue/cli-plugin-typescript/index.js
写的插件确实是只写了chainWebpack
,并没有调用一次resolveWebpackConfig
问题概括
- 很困惑为什么根据源码来看单chainWebpack无法实现对webpack的修改,但实际运行时却能够生效,是我遗漏了什么点吗?
- 想请教一下你对这一块的看法
插件本身 Api.chainWebpack
肯定是不能修改 webpack
配置,vue-cli3
通过 cli-service
来加载插件,在这个过程中才会去解析每个插件的配置,比如 webpack
配置以及改变项目文件等等,或者说只有在运行的时候才会动态修改 webpack
配置。
好的,提出issue之前还不太懂。之后一直在思考这一块,今早现在终于懂了cli-service
针对webpack这一块的设计理念
感谢你的回复,这个issue我关了