Skip to content

bekacodechn/learn-note

Repository files navigation

练手项目合集

package下为所有练手项目,搭配examples示例,可直接运行。

todo

  1. 所有包统一使用esm
  2. 每个包的package.json添加测试指令
  3. 添加linter
  4. 文章分类

1. queue

先进先出单项链表,支持压栈、出栈、迭代和获取长度。

原项目:yocto-queue

2. p-limit

控制并发,在原基础上添加了取消未完成任务clearPending()

原项目: p-limit

3. p-locate

异步版的Array#find

原项目: p-locate

4. delay

延迟函数,支持打断、提前开始。

原项目:delay

5. p-settle

类似Promise.allSettled,但支持控制并发。

原项目: p-settle

6. p-defer

deferred promise. 将promiseresolvereject挂在同一个对象并返回。

原项目: p-defer

7. p-lazy

延迟执行Promise构造体。在调用then时才执行new PLazy(executor)里的executor

原项目:p-lazy

8. minipack

用javascript编写的现代模块打包器的简化示例,学习自 minipack-explain。

小优化:在构建依赖图时避免了重复收集依赖。

原项目:minipack-explain 有更详细的注释

9. mini-webpack

  1. 相比minipack多实现了loaderplugin,构建依赖等核心代码基本相同。
  2. loader的调用发生在将module转为ast之前,是source => source的过程(均为字符串)。
  3. plugin的机制本质上是观察者模式,每个plugin都是一个类,并提供apply方法,插件开发者在这个方法内订阅若干事件(声明周期)。在webpack初始化compiler后立即遍历 plugins并调用apply。用到了tapable库,该库提供插件的多种运行模式。

原项目:mini-webpack

10. tapable

webpack使用的插件管理机制。 在examples提供了各种hook的运行示例。tapable里的各种tap是通过new Function形式动态生成的,看一下就行,平常写代码不会这样写。

原项目: tapable

参考文章:【中级/高级前端】为什么我建议你一定要读一读 Tapable 源码?

11. koa-compose

koa洋葱模型。

原项目: koa-compose

12. interesting-program

收集有趣的代码片段/功能

13. dot-prop

todo.

14. webpack

持续更新

15. lru-cache

模仿quick-lru写的简单lru工具,去除了双mapmaxAge双map方案借鉴了hashlru,是为了解决delete obj[prop]慢的问题。

原项目: quick-lru

16. glob-to-regexp

简版glob。 将*等通配符转为正则表达式,识别*?{}[],代码100来行,但很精彩。

  1. for循环 + switch + while循环逐字解析字符串,并转为正则字符串。
  2. switch里的break放在if里,不符合要求时穿透下面的case,在最后的case里统一处理之前的内容。
  3. 可以作为学习dot-prop铺垫。

原项目: glob-to-regexp

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published