大家好,我是山月,这是我新开的一个坑:手写源码最小实现,每一行代码都有注释。
当我们在深入学习一个框架或者库时,为了了解它的思想及设计思路,也为了更好地使用和避免无意的 Bug,源码研究是最好的方法。
对于 koa
与 vdom
这种极为简单,而应用却很广泛的框架/库,莫不如是。为了验证是否已足够了解它,可以实现一个仅具备核心功能的迷你的库。正所谓,麻雀虽小,五脏俱全。
对于源码,我将尽可能注释每一行代码,并以文章讲述原理与实现过程。目前已实现列表为:
由于目前浏览器对 ESM 已支持良好,对于客户端相关源码使用 ESM 书写,比如 vDOM、React 等。而对于服务端使用 CommonJS 书写,如 koa、express 等。
本项目采用 monorepo
进行维护,如果你对它不了解,可直接忽略。
所有的迷你版本实现置于 code
文件夹,源文件置于 index.js
中,示例文件置于两个位置:
example.js
example/
关于查看及运行示例,请使用命令 npm run example
$ git clone git@github.com:shfshanyue/mini-code.git
# 在 npm v7 中,会对所有 workspace 中的依赖进行安装
$ npm i
# 在 monorepo 中运行某个源码示例
# 或者进入代码目录,再运行示例: cd code/express && npm run example
$ npm run example -w express
如果你对 monorepo
不了解:
$ git clone git@github.com:shfshanyue/mini-code.git
$ npm i
$ cd example/express
$ npm i
$ npm run example
在调试了千万遍源码之后,才能对源码稍微理解,摆在这里的问题是:如何调试源码?
TODO: 以前三篇文章,随后附上
添加我的微信 shanyue94
:
以下源码按次序,从易到难进行阅读,否则碰到大块头(比如 React),读不下去,容易怀疑自我,从简单的开始读起,有助于培养自信心
苹果设备没更新一次,版本都得维护一下,不然后台分析就老说收集到不明手机型号。��为大家献上新的获取iPhone 6,iPhone 6s,iPhone6Plus, iPhone6sPlus,iPad Air2, iPad Mini 4的设备型号获取方式 附上苹果官网设备型号表供参考 官网型号对照链接 https://www.theiphonewiki.com/wiki/Models //获得设备型
回顾一下 Vuex 的基础用法 // store/index.js import Vuex from 'vuex' import Vue from 'vue' Vue.use(Vuex) export default new Vuex.Store({ state: {}, getters: {}, actions: {}, mutations: {}, }) // main
#include <stdio.h> #include <stdlib.h> #define MAX_SIZE 4 #define MAX_TOTAL 10 void inputMatrices( int matrix[MAX_SIZE][MAX_SIZE], int size ); void printMatrices( int matrix[MAX_SIZE][MAX_SIZE], int s
Given a nested list of integers represented as a string, implement a parser to deserialize it. Each element is either an integer, or a list -- whose elements may also be integers or other lists. Note:
on startup: ./.erlang $HOME/.erlang From [url]http://mryufeng.iteye.com/blog/pdf[/url] [quote]io:format("~s~n", [binary_to_list(erlang:system_info(info))]). netstat -n | awk '/^tcp/ {++S[$NF]} END {fo
本文向大家介绍CI框架Session.php源码分析,包括了CI框架Session.php源码分析的使用技巧和注意事项,需要的朋友参考一下 CI的Session并不是原生的session,正是我前面所有的cookie based session,另外,CI可以根据用户选择配置是否将session存入数据库中,本人很喜欢这个功能,还有就是“闪出数据”的功能,既闪出数据只是对下次服务器请求可以,之后就
问题 你想写解析并分析Python源代码的程序。 解决方案 大部分程序员知道Python能够计算或执行字符串形式的源代码。例如: >>> x = 42 >>> eval('2 + 3*4 + x') 56 >>> exec('for i in range(10): print(i)') 0 1 2 3 4 5 6 7 8 9 >>> 尽管如此,ast 模块能被用来将Python源码编译成一个可被分
本文向大家介绍javascript运动框架用法实例分析(实现放大与缩小效果),包括了javascript运动框架用法实例分析(实现放大与缩小效果)的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了javascript运动框架用法。分享给大家供大家参考,具体如下: 该运动框架可以实现多物体任意值运动 运行效果截图如下: 例子: 更多关于JavaScript运动效果相关内容可查看本站专题:《Ja
本文向大家介绍CI框架安全类Security.php源码分析,包括了CI框架安全类Security.php源码分析的使用技巧和注意事项,需要的朋友参考一下 CI安全类提供了全局防御CSRF攻击和XSS攻击策略,只需要在配置文件开启即可: 并提供了实用方法: CI也提供了安全函数: xss_clean()//xss过滤 sanitize_filename()//净化文件名 do_hash()//md
本文向大家介绍CI框架装载器Loader.php源码分析,包括了CI框架装载器Loader.php源码分析的使用技巧和注意事项,需要的朋友参考一下 顾名思义,装载器就是加载元素的,使用CI时,经常加载的有: $this->load->library() $this->load->view() $this->load->model() $this->load->database() $this->l
本文向大家介绍Java实现AOP功能的封装与配置的小框架实例代码,包括了Java实现AOP功能的封装与配置的小框架实例代码的使用技巧和注意事项,需要的朋友参考一下 本文通过是动态代理实现的AOP功能的封装与配置的小框架.加深对动态代理和AOP编程的理解 设计 根据配置文件的键xxx对应的值(类全名)创建相应类的对象。 当且仅当xxx对应的值为com.iot.proxy.aopframework.P