# 准备工作

首先,社区上虽然有很多axios源码解析的文档或者博客,但是很多都不够详细,细节讲的不够到位。在我编写这份电子文档的之前,其实我已经阅读过了一次axios的源码。所以,这一次我打算在阅读一次,并把自己的学习记录,学习过程,一些思考的问题,理解,还有一些细节点,记录下来,分享给大家,希望对大家有帮助。

然后,这份电子文档是完全免费开源的,欢迎大家订阅,如果这份电子文档对大家有帮助,希望你可以给我个 star

在开始学习axios源码之前,我们需要做一些准备和说明,这样可以更加有效帮助我们去阅读源码

# 说明

首先,我们当前阅读的版本是0.21.0,如果后面有重大更新,我也会去跟着更新这份电子文档。

其次,我们是逐行分析(代码量不多),力求讲解到位,细节。在我阅读的过程中,我会在每一行代码上面做一些代码注释,还有一些自己的思考,理解。所以在你阅读axios源码的过程中,我建议你下载我已经做过注释的代码,这样效率会更加好,代码位置在该电子文档仓库的axios-code目录下。其中,我已经删除了一些无关要紧的文件或者文件夹,比如.eslintrc.jsexamples等,这些都是跟阅读源码无关的东西,基本上,我们只留下lib目录即可了

最后,我们是采用自顶向下的阅读方法,即从入口文件开始,逐步往下分析所使用到的构造函数,函数的实现和原理。有点类似在浏览器做debug那样,一点一点的深入分析。同时,在我们阅读分析源码的过程中,会扩展出一些额外的知识点。

# 目录结构

我们首先来看一下axios源码的目录结构

- project
    - dist                  // 打包产物存放目录
    - lib                   // 源码存放的地方
        - adapters          // 适配器
        - cancel            // 取消请求相关的代码
        - core              // 核心代码
        - helpers           // 工具函数
        - axios.js          // 主函数
        - defaults.js       // 默认配置项
        - utils.js          // 通用的工具
    - sandbox               // 快照
    - test                  // 测试文件存放的目录
    - index.js              // 入口文件
    - package.json          // package.json文件
    - webpack.config.js     // 打包配置文件

在阅读源码的过程中,我们只需要关注lib即可,lib目录时存放源码的地方,其中:

  • adapters 是存放适配器的目录,就是发送请求的具体实现,目前只有web端和node端的适配器

  • cancel axios 具有取消请求的功能,这部分的功能实现就是在该目录下的

  • core 核心代码,axios 对象的创建,拦截器等实现都是在这个目录下的

  • helpers 辅助工具函数

  • axios.js 源码的入口

  • defaults.js axios 的默认配置项

  • utils.js 基础的通用工具函数

# 入口文件

在阅读前,我们首先要找到入口文件。通过查找 package.json 文件,我们可以发现main字段指向的是项目根目录的index.js文件,这个文件就是入口文件。

我们也可以通过scriptbuild命令,查找到打包配置文件,通过配置文件找到入口文件