webpack源码简版

文章讲述了Compiler.js和Bundler.js在Webpack中的作用,包括解析webpack.config.js、创建AST语法树、处理依赖关系,并使用Babel将代码转换为浏览器可执行的代码。Bundler.js最终生成分发代码并输出到文件中。
摘要由CSDN通过智能技术生成
  1. Compiler.js:负责整个编译过程的控制和管理,包含compiler构造函数,在构造函数中获取webpack.config.js的出口、入口、参数等
  2. Bundler.js:引入webpack.config.js和compiler.js,创建compiler实例化对象并传入options。
  3. 拿到webpack配置参数后开始根据入口文件解析文件内容(fs.readFileSync读取文件内容)
    (1). @babel/parser:将文件内容的的源代码解析成AST语法树,AST语法树的节点包含了文件依赖的文件名称。(type,start,end,…)
    (2). @babel/traverse:提取依赖的文件名称到一个数组中
    (3). @babel/core:通过babel.transformFromAst方法将ast转换成浏览器可执行的代码;返回一个对象{文件名,依赖数组,可执行代码},作为依赖图的一个节点
    (4). 遍历入口文件的依赖数组,数组中是文件名,递归执行上述方法直到找到所有的依赖,然后返回依赖对象。
  4. Bundler.js使用compiler对象的run方法生成依赖对象,并通过bundle方法解析graph(依赖图对象),使用eval方法来调用code并输出分发代码
  5. Bundler.js使用fs.writeFileSync将分发代码输出到文件中,生成bundle。

complier.js

// 文件操作模块,读取文件内容
const fs = require("fs");
const path = require("path");
const parser = require("@babel/parser");
const traverse = require("@babel/traverse").default;
const babel = require("@babel/core");
module.exports = class Complier {
   
  constructor(options) {
   
    const {
    entry, output } = options;
    this.entry = entry;
    this.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值