「这是我参与2022首次更文挑战的第1天,活动详情查看:2022首次更文挑战」。
手撕koa,从零掌握koa的实现原理。
前言
最近在学习node
,借着更文活动,和大家分享一下,希望大家指出不足。
了解官方koa的目录
-
图一是
npm
安装的官方koa
的结构。koa
就是对node原生的http
服务进行了封装。各个文件的具体作用如下。-
koa/lib/application.js
中是koa
的整个应用。 -
koa/lib/context.js
中是koa
的上下文。 -
koa/lib/request.js
是用于扩展原生请求的。 -
koa/lib/response.js
是用于扩展原生响应的。 -
koa/dist/koa.mjs
用来处理esModule
的。(图一
node_modules/koa
的目录结构)
-
-
我们使用
koa
的时候是下面这样。const Koa = require('koa') const app = new Koa()
-
不知道大家有没有这个疑问,那我们导入的这个
koa
是从哪里来的呢?从图二可以看到,在
koa
的package.json
中main
的值是lib/application.js
,在我们导入第三方npm包的时候,require
会优先导入package.json
中main
指定的文件。(图二
node_modules/koa/package.json
)
我们自己的koa工程目录
整个工程叫
koa
,koa/koa
文件夹存放我们自己实现的koa
代码,src
文件夹存放我们的测试代码。
(图三项目工程结构)
application.js初步实现
在我们工程目录
koa/koa/lib
下新建一个application.js
。application.js
的里边主要是导出我们的整个koa
。回想我们使用koa
的时候,koa
是一个类,需要用new
去调用。
-
koa/koa/lib/application.js
class Application { constructor(){ console.log('我是Application') } } module.exports = Application
我们声明一个
Application
的类,在constructor
中输出我是Application
,最后导出Application
。 -
koa/src/server.js
在
koa/src/server.js
中我们导入Application
类,我们可以在koa/koa
文件夹下面新建一个package.json
,里面加入main
字段,这样我们在导入我们自己的koa
的时候就会自动去找main
指定的文件了。koa/koa/package.json
{ "main": "./lib/application.js" }
导入Application,测试一下
在
src
目录下新建一个server.js
,我们来写我们的测试代码。
-
koa/src/server.js
const Koa = require('../koa') const app = new Koa()
这里
require('../koa')
会导入koa/koa/package.json
中main
指定的文件,我们用node
跑一下koa/src/server.js
,控制台成功打印见图四。(图四控制台打印)
今天的实现就到这里,明天继续。
看到这里的兄弟给点个赞吧,万分感谢。
最近也在学习如何搭建自己的博客,博客地址:Roubzi Blog ,目前还在搭建中,希望和大家多交流。
在这个不能停下脚步的时代,即便我们很菜,我们也可以去追求更优秀的自己,以及,所有那些值得去追求的美好事物。
时不我待,舍我其谁。
新的一年,祝你,也祝我。