现代javascript库开发 原理、技术与实战

Site Unreachable

第 1 章 从零开发一个 JavaScript 库

可以对项目中的功能做抽象设计,然后提取通用的逻辑,形成公共的库
迅速记录想法,时常回顾,选择合适的目标实现
(个人开发的时候,尽量选择精简,功能专一的库,避免半途而废)

深拷贝 浅拷贝

深度优先遍历
图的深度优先遍历介绍 | 数据结构与算法 系列教程(笔记)

判断 js 变量的方法
toString

package mode
cjs

第 2 章 构建

模块化

引入构建流程,兼容新老技术 稳定性

构建模块的规范
原始(可以理解为函数)
AMD.md
CommonJS - Wikipedia
GitHub - umdjs/umd: UMD (Universal Module Definition) patterns for JavaScript modules that work everywhere.
index.js

Modules: ECMAScript modules | Node.js v21.1.0 Documentation
index.esm.js

依赖关系

对于库的开发者:
传统体系:
原始模块

nodejs 体系:
库需要支持的规范:commonjs/umd

工具化体系(例如构建工具 webpack rollup 等等)
库需要支持的规范:esm 和 commonjs

手动适配非常麻烦- 解决方法:使用打包工具来完成

打包方案


aio
all in one

webpack rollup

webpack4 才支持 scope hoisting 作用域提升
之前因为函数不在同一个作用域,会出现很多冗余代码
ModuleConcatenationPlugin | webpack

兼容性
用@babel/preset-env 转为 es5 的语法
如果用了 es2015 的 api,那么还需要安装 polyfill,babel 已经内置了 corejs,直接安装@babel/plugin-transform-runtime 配置一下就可以