Webpack原理
- 获取主模块内容
主要是通过require('fs')去进行读取入口的文件 - 分析模块
将获取到的模块内容解析成AST语法树,咋转?通过@babel/parser
// 获取主入口文件
const fs = require('fs')
const parser = require('@babel/parser')
const getModuleInfo = (file)=>{
const body = fs.readFileSync(file,'utf-8')
// 新增代码
const ast = parser.parse(body,{
sourceType:'module' //表示我们要解析的是ES模块
});
console.log(ast);
}
getModuleInfo("./src/index.js")
- 收集依赖
遍历AST,将用到的依赖收集起来。将用import语句引入的文件路径收集起来。采用babel/traverse - 将ES6转成ES5,使用babel/preset-env
- 递归获取所有依赖并存到depsGraph中
- 处理import和export关键字