Koa源码学习(0)

一直想看点库的源码,后来发现,Koa好像只有几千行,那就拿它开刀啦~

现场clone,版本应该是2.6.2,2018-10-6的


文件结构

也算是学习一下一个开源项目如何组织吧…

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
.
├── .editorconfig
├── .eslintrc.yml
├── .git
├── .gitignore
├── .mailmap
├── .npmrc
├── .travis.yml
├── AUTHORS
├── CODE_OF_CONDUCT.md
├── History.md
├── LICENSE
├── Readme.md
├── /benchmarks
├── /docs
├── /lib
├── package.json
└── /test
  • Readme.md: 不解释,字面意思
  • LICENSE: 开源项目的license,目前自己不太懂,有空了解一下,先不管,跟代码无关
  • History.md: 记录项目时间线,嗯,很有必要,似乎部分还是自动生成的,像GitHub的issue,PR等等还是需要进一步的学习
  • CODE_OF_CONDUCT.md: 有趣,行为守则声明,原来开源项目还有这个
  • AUTHORS: 不解释
  • .git, .gitignore: 不解释
  • .mailmap: 可能是一个author-mail的对应吧,不过里边只有一个名字,很奇怪
  • .editorconfig: 一个更改Editor/IDE编辑器的设置工具,读取文件,然后改变IDE/Editor的设置,高级啊!!!https://editorconfig.org/
  • .eslintrc.yml: eslint的配置,eslint自己也需要进一步的学习
  • .npmrc: npm的配置,加一句package-lock=false就可以不生成package-lock.json,学习到了
  • .travis.yml: TravisCI相关的东西,等看它测试的时候再说吧
  • package.json: npm的dependency、scripts等配置,入口!第一个与代码相关的文件
  • lib: 源码
  • test: 测试代码,测试需要好好学习一下
  • docs: 文档
  • benchmarks: 性能测试

package.json

读所有node项目源码的第一步…

npm官方文档关于package.json的:https://docs.npmjs.com/files/package.json

  • name, version: 必须,用于identify一个npm包
  • description, keywords: optional 用于npm serach的时候
  • license: 暂不解释

main

The main field is a module ID that is the primary entry point to your program. That is, if your package is named foo, and a user installs it, and then does require(“foo”), then your main module’s exports object will be returned.

之前一直觉得没啥用,原来这么关键,就是require的时候,返回的对象

files

The optional files field is an array of file patterns that describes the entries to be included when your package is installed as a dependency.

也很有用,当别人依赖这个包的时候,不是装所有的包,而是只装所包含的文件

所谓npm install,其实就是把文件下载下来放到node_modules里,没啥神奇的

repository

repo的位置,默认GitHub,加上后边的路径,所以就是koajs/koa

engines

声明node版本吧

jest

jest的配置,感觉放在package.json里不如放在jest.config.js里,这个日后再看

dependencies

依赖,如果npm -i -s的话,会自动加进去

devDependencies

开发时候的依赖,如果这个项目运行的时候不需要的依赖,那就放在这里边

scripts

执行脚本,npm run xxx


OK,所有的term都看过了,接下来,npm install

跑一跑scripts里边的几个命令,注意bench的时候,没有安装wrk,先装一下

第一个Koa应用

官方的tutorial:

1
2
3
4
5
6
7
8
9
const Koa = require('../koa');
const app = new Koa();
// response
app.use(ctx => {
ctx.body = 'Hello Koa';
});
app.listen(3000);

Debug

现在有个问题是,如何调试,node应用,如何打断点,单步运行呢?

先看一看官方的guide吧:https://nodejs.org/en/docs/guides/debugging-getting-started/

官方指引的Debug NodeJS in Chrome: https://medium.com/@paul_irish/debugging-node-js-nightlies-with-chrome-devtools-7c4a1b95ae27

发现新大陆啊!!!

嗯嗯,vscode的配置也很简单,甚至帮你自动完成!

自此,准备工作结束,开始源码之旅~