【Webpack】进阶

核心打包原理

打包工作的主要流程如下:

  1. 需要读到入口文件里的内容
  2. 分析入口文件,递归的去读取模块所依赖的文件内容,生成AST语法树
  3. 根据AST语法树,生成浏览器能够运行的最终代码

具体细节:

  1. 获取主模块内容
  2. 分析模块内容
    • 安装@babel/parser包(转AST)
  3. 对模块内容处理
    • 安装@babel/traverse包(遍历AST)
    • 安装@babel/core和@babel/preset-env包(Es6转Es5)
  4. 递归所有模块
  5. 生成最终代码

loader

loader本质上就是一个函数,这个函数会在我们加载一些文件时执行

实现同步loader
  1. 初始化项目

  2. 创建sync函数并返回

    • 注意:函数返回值必须是一个buffer或者string类型
    • 注意: loader中的this有很多信息 所以一定不要使用箭头函数
    • 使用loader-utils包 完成更复杂loader的编写
      • 通过loader-util获取message信息
      • 返回处理过后的值
        • return 返回单条信息
        • this.callback 函数返回多个参数
  3. webpack.config.js配置loader 在这里插入图片描述

实现异步loader
  1. 在loader中使用this.async()方法 异步操作

在这里插入图片描述

手写plugin

plugin通常是在webpack在打包的某个时间节点做一些操作,我们使用plugin的时候,一般都是new Plugin()这种形式使用,所以,首先应该明确的是,plugin应该是一个类。

plugin类里面需要实现一个apply方法,webpack打包时候,会调用plugin的aplly方法来执行plugin的逻辑,这个方法接受一个compiler作为参数,这个compiler是webpack实例。

  1. 创建一个demoPlugin类
  2. 编写compiler hooks的同步和异步写法
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值