本文的主要內容是經過描述做者本身學習koa源代碼的過程,來和你們一塊兒來學習koa的源碼,koa設計的初衷是 致力於成爲 web 應用和 API 開發領域中的一個更小、更富有表現力、更健壯的基石,說白了就是 小巧 ,擴展性高因此koa的源碼閱讀起來也相對容易,若是你跟着個人文章學習 還學不會那麼必定是我寫的很差。css
先說一下爲何要進行源碼的學習,主要就兩點:前端
我以爲看源碼的學習效率遠遠比單純的學習原理概念更高(僅僅爲了面試就當我沒說),若是你學習過不少js的原理、概念、高階用法可是發現實際項目中不多用到,經過閱讀源碼能夠在高質量的開源項目中學習大神們是怎麼應用這些技巧,若是你想提高你的編程能力,閱讀源代碼是很是好的的方式。node
準備工做比較簡單git
git clone https://github.com/koajs/koa.git
複製代碼
注:本文不會先闡述koa思想,而是在代碼學習的過程當中學習思想github
源碼已經準備就緒,咱們先來看一下目錄結構。
我在文章中會描述一些我學習koa源碼使用的方法,和我對其的理解,不免有錯漏請見諒。web
1、不要慌,先看看本身有哪些認識的文件面試
2、再看一些雖然可能沒有寫過可是必定很眼熟的編程
那麼剩下的可能咱們不認識可是不妨礙根據上面的信息咱們推測,應該也都是某種配置或者信息記錄。json
3、咱們再來看一下文件夾相關的信息,仍是先從知道的下手。
文件夾不多除了.github外只有4個 test(測試相關) 、doc(文檔相關) 這兩個文件夾應該均可以看出來。
benchmarks可能不太常見,可是咱們google一下就發現是驗證性能以及基準數據用的對咱們想要閱讀源碼來講影響不大。
而lib通常在前端工程中都是被調用的程序集(不少狀況下都是將src編譯後生成)。api
經過咱們看到一個項目都是從 package.json 看起
咱們經過package.json 能夠得到基本描述信息、腳本信息、依賴 等等。
(若是對package.json不瞭解的同窗能夠先找一下文檔簡單學習一下)
打開package.json一眼就看到對如今的咱們最重要的信息 位於第5行的
"main": "lib/application.js"
複製代碼
找到了入口文件,位於lib目錄下的application.js
經過上面的分析咱們瞭解到其餘的目錄都是測試或者文檔相關的,那麼這個lib目錄此時就顯得很是關鍵。
打開lib目錄發現這個目錄沒有子目錄且只有4個文件。 這個時候咱們先啓動一個最基礎的koa項目--hello world
const Koa = require('koa');
const app = new Koa(); app.use(async ctx => { ctx.body = 'Hello World'; }); app.listen(3000); 複製代碼
同時咱們知道入口文件 是 lib/application.js,由此咱們得知上面代碼中第一行 const Koa = require('koa')
導出的Koa 指的就是這個 application.js 文件。
點開 application.js 文件發現是沒有編譯過的js文件(一般lib中的文件都是src文件編譯過的不具備可讀性),而後我打開了Koa項目(不是源碼項目)中的node_module中的koa文件,發現那裏面的lib文件和源碼中的徹底同樣。
至此,咱們能夠肯定Koa項目是不編譯的,導出使用的就是源碼,因此沒有src目錄只有lib目錄,lib目錄的內容就是源碼。並且只有4個文件加一塊兒只有不到2000行,真的是足夠小巧精幹。
本篇目錄結構咱們先分析到這裏,下一篇會講述關於application.js的內容,本文徹底按照做者本身學習源碼的過程進行描述,文筆很差讀起來可能會有一點流水帳,可是做者會努力描述清楚,而且把閱讀源碼的一些方法技巧分享,請收藏點贊支持。
手把手和你一塊兒學習Koa源碼(二)——Appilication
本文使用 mdnice 排版