摘要:
在上一节中,最后返回了一个resolver,本质上就是一个Resolver对象: 这个对象的构造函数非常简单,只是简单的继承了Tapable,并接收了fileSystem参数: resolve 而在make事件流中,调用的正是该类的原型方法resolve,现在可以进行看一眼了: 需要注意的是,该方法 阅读全文
摘要:
原本该在过WebpackOptionsApply时讲解这个方法的,但是当时一不小心过掉了,所以在这里补上。 compiler.resolvers 该对象的三个方法均在WebpackOptionsApply中生成,代码如下: 由于调用的是一个工厂函数,所以用normal作为示例讲解。 其中参数中的re 阅读全文
摘要:
上一节跑到了NormalModuleFactory模块,调用了原型方法create后,依次触发了before-rsolve、factory、resolver事件流,这节从resolver事件流开始讲。 源码简化如下: 第一次进来这个函数传入的是entry,在这里对字符串进行正则校验与切割,一般情况下 阅读全文
摘要:
compilation事件流中,依然只是针对细节步骤做事件流注入,代码流程如图: 触发完compilation事件流后,会直接返回一个compilation对象,然后触发下一个事件流make。 make的来源在EntryOptionPlugin插件中,无论entry参数是单入口字符串、单入口数组、多 阅读全文
摘要:
这一节跑下一批plugin。 希望不要跟上一节一样,全是plugin。 流程如图(看看流程图就行了,后面也没有什么内容): EnsureChunkConditionsPlugin 这个看看就懂,不解释了。 RemoveParentModulesPlugin 难道又是另一批plugin么…… Remo 阅读全文
摘要:
下一个compilation来源于以下代码: 之前简单分析该处的apply,此处只看非数组单入口的情况,此时会引入SingleEntryDependency模块,与compilation相关的内容如下: 此处用到了ES6新加的数据结构Map,SingleEntryDependency是个没什么营养的 阅读全文
摘要:
正式开始跑编译,依次解析,首先是: 流程图如下: 这里是第一个compilation事件注入的地方,注入代码如下: 这里的requestShortener为FunctionModulePlugin的第二个参数,没有传所以是undefined。 options.output为传入的output参数,但 阅读全文
摘要:
呃,终于到了这地方…… MMP,有31个函数,估计可以写到明年了。 这里先梳理所有事件的注入来源,经检测,全部来源于WebpackOptionsApply中,回到那个可怕的模块,梳理后如下: 还好都集中在一个地方,这样又可以写流水账了。 这里先要过一个地方,之前似乎遗留了: 这里注入了entry-o 阅读全文
摘要:
上一节生成Compilation实例后,添加了一些属性,随后触发this-compilation事件流,如下: 事件流的名字this-compilation我想了半天也不懂啥意思,从其内容来看其实也只算是一个预编译,叫pre-compilation似乎更好。 总之先不管那么多,继续跑流程,流程图如下 阅读全文
摘要:
这里的编译前指的是开始触发主要的事件流this-compilaiton、compilation之前,由于还有一些准备代码,这一节全部弄出来。 模块基本上只走构造函数,具体的方法调用的时候再具体讲解。 上一节NormalModuleFactory模块的构造函数中,在处理完rules后,注入两个事件流就 阅读全文