如何快速阅读源码?
优质
小牛编辑
138浏览
2023-12-01
学习5阶段
- getting start 入门
- guide 指南
- doc 查api
- 阅读源码
- 向开源贡献代码
你该阅读源码?
上面已经说了,第四个阶段才是读源码
原因是,必须熟练才有用,不然读了也白扯
- 熟练使用该模块
- 熟练掌握npm
- 熟练掌握nodejs语法
有了这个前提你就可以阅读了。
当然事情也不能绝对,没这些,你也可以看,从中找出有用的写法或者学习代码规范也是好的。
看目录结构(express框架)
express git:(master) X tree . -L 2 . ├── History.md ├── LICENSE ├── Readme.md ├── index.js ├── lib │ ├── application.js │ ├── express.js │ ├── middleware │ ├── request.js │ ├── response.js │ ├── router │ ├── utils.js │ └── view.js ├── node_modules │ ├── accepts │ ├── array-flatten │ ├── content-disposition │ ├── content-type │ ├── cookie │ ├── cookie-signature │ ├── debug │ ├── depd │ ├── escape-html │ ├── etag │ ├── finalhandler │ ├── fresh │ ├── merge-descriptors │ ├── methods │ ├── on-finished │ ├── parseurl │ ├── path-to-regexp │ ├── proxy-addr │ ├── qs │ ├── range-parser │ ├── send │ ├── serve-static │ ├── type-is │ ├── utils-merge │ └── vary └── package.json 29 directories, 11 files
package.json
这是一个npm模块
- dependencies
- devDependencies
- scripts
- bin
- main
- repository
- license
- homepage
体会细节的差异
node_modules
放的是当前模块依赖的其他模块
index.js
npm有一个约定,如果你的项目主文件是index.js可以不在package.json里写明,如果是其他文件就必须写清楚
比如shelljs里的
"main": "./shell.js",
好了,我们继续看express的package.json,他没有定义main文件,那我们就找index.js
程序入口
/*! * express * Copyright(c) 2009-2013 TJ Holowaychuk * Copyright(c) 2013 Roman Shtylman * Copyright(c) 2014-2015 Douglas Christopher Wilson * MIT Licensed */ 'use strict'; module.exports = require('./lib/express');
lib
从index.js可知,里面的功能都写在了lib里,也就是说,这里才是最重要的战场
其他
├── Readme.md 最重要的文档 ├── History.md 一般是更新历史 ├── LICENSE 授权协议
类似的文件写的都比较清楚,需要的时候再看不急
建立大局观
大局观有2种
- 目录结构,npm,约定等,属于常识类
- 代码大局观
先大致看一遍,花个个把小时,一定要都看了,不求看懂,但求不放过每一个文件
这就好比买书一样,如果头一周么有看完,这辈子这边书看完的可能性就很渺小了
模块阅读
- 根据头3步骤(入门,指南,文档)的理解,大致可以猜出一些,比如(req,res,router,view,middleware)
- 根据文件结构,index指向lib/express,那这就是入口,看看里面组装关系,又明白一层
- 每个文件去读,里面多少有点熟悉的东西
源码阅读
package.json 里的 files
.npmignore
- 先看 test、benchmark、examples
- 其他步骤同上
带着问题去探索
比如我想获得访问此网页人的ip
扒出来的都是自己的
从代码里学,才是最常久的,开源的东西已经足够多了,每天打开 github,看一下
https://github.com/trending
最近比较火的项目都有了,挑喜欢的扒一扒,肯定是有你不会的