引入
其实在Webpack官网,可以看到官方对于Webpack的定位是一个打包工具。而它最基础的使用就是在浏览器中实现JS的模块化和将ES6转为ES5。
浏览器中引入一个JS文件,如果文件中有使用import
语句进行模块的引入,浏览器是会报错的。
那么我们要实现的这个基础的打包工具也就是用来解决这个问题的。
步骤简述
- 分析(入口)文件
- 读取文件内容
- 生成AST(抽象语法树)
- 遍历树中节点,并形成该文件的依赖关系
- 根据AST生成对应的符合ES5规范的代码
- 分析依赖关系中依赖的其它文件,直到所有文件都经过分析
- 生成最终代码(可在浏览器中直接运行,并实现了模块间的引用)
具体实现
分析文件
源码
const moduleAnalyser = (filename) => {
const dependencies = {
};
const content = fs.readFileSync(filename, 'utf-8');
const ast = parser.parse(content,{
sourceType: 'module'
});
traverse(ast, {
ImportDeclaration({
node })