# 准备工作
首先,社区上虽然有很多axios
源码解析的文档或者博客,但是很多都不够详细,细节讲的不够到位。在我编写这份电子文档的之前,其实我已经阅读过了一次axios
的源码。所以,这一次我打算在阅读一次,并把自己的学习记录,学习过程,一些思考的问题,理解,还有一些细节点,记录下来,分享给大家,希望对大家有帮助。
然后,这份电子文档是完全免费开源的,欢迎大家订阅,如果这份电子文档对大家有帮助,希望你可以给我个 star
在开始学习axios
源码之前,我们需要做一些准备和说明,这样可以更加有效帮助我们去阅读源码
# 说明
首先,我们当前阅读的版本是0.21.0
,如果后面有重大更新,我也会去跟着更新这份电子文档。
其次,我们是逐行分析(代码量不多),力求讲解到位,细节。在我阅读的过程中,我会在每一行代码上面做一些代码注释,还有一些自己的思考,理解。所以在你阅读axios
源码的过程中,我建议你下载我已经做过注释的代码,这样效率会更加好,代码位置在该电子文档仓库的axios-code
目录下。其中,我已经删除了一些无关要紧的文件或者文件夹,比如.eslintrc.js
,examples
等,这些都是跟阅读源码无关的东西,基本上,我们只留下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
文件,这个文件就是入口文件。
我们也可以通过script
的build
命令,查找到打包配置文件,通过配置文件找到入口文件