一直想看点库的源码,后来发现,Koa好像只有几千行,那就拿它开刀啦~
现场clone,版本应该是2.6.2
,2018-10-6的
文件结构
也算是学习一下一个开源项目如何组织吧…
|
|
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:
|
|
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的配置也很简单,甚至帮你自动完成!
自此,准备工作结束,开始源码之旅~