package下为所有练手项目,搭配examples
示例,可直接运行。
- 所有包统一使用
esm
- 每个包的
package.json
添加测试指令 - 添加
linter
- 文章分类
先进先出单项链表,支持压栈、出栈、迭代和获取长度。
原项目:yocto-queue。
控制并发,在原基础上添加了取消未完成任务clearPending()
。
原项目: p-limit
异步版的Array#find
。
原项目: p-locate
延迟函数,支持打断、提前开始。
原项目:delay
类似Promise.allSettled
,但支持控制并发。
原项目: p-settle
deferred promise. 将promise
、resolve
、reject
挂在同一个对象并返回。
原项目: p-defer
延迟执行Promise
构造体。在调用then
时才执行new PLazy(executor)
里的executor
。
原项目:p-lazy
用javascript编写的现代模块打包器的简化示例,学习自 minipack-explain。
小优化:在构建依赖图时避免了重复收集依赖。
原项目:minipack-explain 有更详细的注释
- 相比
minipack
多实现了loader
和plugin
,构建依赖等核心代码基本相同。 loader
的调用发生在将module
转为ast
之前,是source => source
的过程(均为字符串)。plugin
的机制本质上是观察者模式,每个plugin
都是一个类,并提供apply
方法,插件开发者在这个方法内订阅若干事件(声明周期)。在webpack
初始化compiler
后立即遍历plugins
并调用apply
。用到了tapable
库,该库提供插件的多种运行模式。
原项目:mini-webpack
webpack
使用的插件管理机制。 在examples
提供了各种hook
的运行示例。tapable
里的各种tap
是通过new Function
形式动态生成的,看一下就行,平常写代码不会这样写。
原项目: tapable
参考文章:【中级/高级前端】为什么我建议你一定要读一读 Tapable 源码?
koa
洋葱模型。
原项目: koa-compose
收集有趣的代码片段/功能
todo.
持续更新
模仿quick-lru
写的简单lru
工具,去除了双map
、maxAge
。双map
方案借鉴了hashlru,是为了解决delete obj[prop]
慢的问题。
原项目: quick-lru
简版glob
。 将*
等通配符转为正则表达式,识别*
、?
、{}
和[]
,代码100来行,但很精彩。
for
循环 +switch
+while
循环逐字解析字符串,并转为正则字符串。switch
里的break
放在if
里,不符合要求时穿透下面的case
,在最后的case
里统一处理之前的内容。- 可以作为学习
dot-prop
铺垫。
原项目: glob-to-regexp