KuangPF / vue-cli-analysis

vue-cli 源码分析 (vue-cli3)

Home Page:https://kuangpf.com/vue-cli-analysis/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

[Question] 针对cli service中chainWebpack执行的疑问

screetBloom opened this issue · comments

commented

冒昧再请教一下

Background

在我们写service插件的时候会使用Api.chainWebpack去链式的修改我们的webpack配置

比如you尤大在vue-cli/packages/@vue/cli-plugin-typescript/index.js中写的一样
image

我们可以看到这个插件中其实就调了一个Api.chainWebpack,看起来最终插件也成功的链式修改了webpack的配置


Question

从源码来看,这个现象很不科学

PluginApi中Api.chainWebpack只是把要执行的回调push到了一个数组中,并没有去执行:代码
image

最终执行时机是在Service.js/resolveChainableWebpackConfig这一层:
image

但是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 配置。

commented

好的,提出issue之前还不太懂。之后一直在思考这一块,今早现在终于懂了cli-service针对webpack这一块的设计理念
感谢你的回复,这个issue我关了