webpack源码-依赖收集

Posted 刨根

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了webpack源码-依赖收集相关的知识,希望对你有一定的参考价值。

webpack源码-依赖收集

version:3.12.0

程序主要流程:
  • 触发make钩子 Compilation.js
  • 执行EntryOptionPlugin 中注册的make钩子
  • 执行compilation.addEntry
  • 执行compilation._addModuleChain Compilation.js
  • 执行moduleFactory.create(this.semaphore.avaiable 初始化为100) Compilation.js
  • 执行this.buildModule Compilation.js
  • 执行this.processModuleDependencies Compilation.js
  • this.addModuleDependencies Compilation.js
  • buildModule过程中,使用acorn将代码js代码转换为ast,分析require 和 import 语句,触发对应的钩子收集相关依赖。

require

触发 call require:commonjs:item 钩子,在CommonJsRequireDependencyParserPlugin.js

const dep = new CommonJsRequireDependency(param.string, param.range);
dep.loc = expr.loc;
dep.optional = !!parser.scope.inTry;
parser.state.current.addDependency(dep);

import

触发 program钩子 在HarmonyDetectionParserPlugin.js

const module = parser.state.module;
const dep = new HarmonyCompatibilityDependency(module);
dep.loc = {
   start: {
      line: -1,
      column: 0
   },
   end: {
      line: -1,
      column: 0
   },
   index: -2
};
module.addDependency(dep);

每一个依赖(Dependency)的实体都包含一个module字段,指向被依赖的Module. 这样通过Module的dependencies数组成员就能找出该模块所依赖的其它模块。 webpack使用不同的Dependency子类,如AMDRequireDependency ,AMDDefineDependency ,AMDRequireArrayDependency,CommonJsRequireDependency,SystemImportDependency来表式不同的模块加载规范, 通过对应的DependencyParserPlugin来加载 AMD或CMD的模块。

以上是关于webpack源码-依赖收集的主要内容,如果未能解决你的问题,请参考以下文章

常用Javascript代码片段集锦

webpack带来的安全风险

webpack 启动代码源码解读

Webpack打包流程细节源码解析(P2)

webpack

读Vue源码 (依赖收集与派发更新)