- 创建webpack函数,模拟webpack
- webpack接受配置参数和回调函数
- webpack内部,将配置和回调函数传给compiler实例,compiler负责将所有的配置信息以及所有的钩子函数、loader、plugins等挂载
- 在compiler内部,使用tapable库创建所需的不同类型的钩子函数,然后统一注册所有的plugin
- 创建新的compilation实例,接收compiler提供的所有配置,执行编译工作
- 根据提供的入口文件,依据依赖关系,编译所有的文件(为了避免循环依赖,将所有的依赖保存起来,每次编译前,根据模块路径判断是否需要编译)
- 编译流程是先使用loader处理,将结果获取到,同时获取文件hash值,用于缓存
- 然后编译loader处理后的文件
- 使用@babel/parse将代码转换成ast
- 使用@babel/traverse遍历词法节点
- 对于require函数调用的,使用@babel/types生成一个名为__webpack_require__的babel词法节点,替换原有
- 将修改后的ast使用@babel/generator还原为代码并返回
- 在整个修改过程中,将依赖收集起来一并返回
- 将模块路径与编译后的代码保存为映射关系
- 递归遍历拿到的依赖,确保所有依赖被编译
- 调用emitFile方法,将收集到的模块路径与代码映射里面的代码遍历,使用ejs模板去拼接成一个个的自执行函数并写入文件,写入文件之后可以将信息保存在一个缓存信息目录中,在下一次重写文件前先判断是否发生改变,确定是否需要重写文件
-
Notifications
You must be signed in to change notification settings - Fork 0
margin666/mini-webpack
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
About
mini-webpack
Resources
Stars
Watchers
Forks
Releases
No releases published
Packages 0
No packages published