「这是我参与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.jsclass 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.jsconst Koa = require('../koa') const app = new Koa()这里
require('../koa')会导入koa/koa/package.json中main指定的文件,我们用node跑一下koa/src/server.js,控制台成功打印见图四。(图四控制台打印)
今天的实现就到这里,明天继续。
看到这里的兄弟给点个赞吧,万分感谢。
最近也在学习如何搭建自己的博客,博客地址:Roubzi Blog ,目前还在搭建中,希望和大家多交流。
在这个不能停下脚步的时代,即便我们很菜,我们也可以去追求更优秀的自己,以及,所有那些值得去追求的美好事物。
时不我待,舍我其谁。
新的一年,祝你,也祝我。