科技>计算机>计算机科学
现代JavaScript库开发:原理、技术与实战  

现代JavaScript库开发:原理、技术与实战  "

作者:颜海镜,侯策
ISBN:9787121445125
定价:¥108.0
字数:437千字
页数:364
出版时间:2022-11
开本:16开
版次:01-01
装帧:
出版社:电子工业出版社
简介

开发JavaScript库是入门前端领域的重要一步。本书旨在帮助前端开发者掌握现代JavaScript库的开发技术,让每个人都可以开源自己的现代JavaScript库。本书系统介绍了现代JavaScript库开发涉及的技术、原理和最佳实践,以及将库开源后如何做好维护工作。在最佳实战部分,本书选取了9个典型库作为案例,展示开发流程,代码清晰、完善。 本书既适合对现代JavaScript库开发及开源感兴趣的前端开发者阅读,也适合想要学习前端项目开发技术的初学者阅读。

前言

前言 十年磨一剑 十年,弹指一挥间。 回首过去十年,我一直致力于开源库的开发和维护,一路走来,我也从这个领域的“小白”慢慢成长为“专家”。这十年,支撑我坚持在库开发领域耕耘的原因是热爱分享,我特别希望能把自己做的东西分享给别人,分享的内容既可以是课程、博客文章,也可以是代码。在我看来,一份分享出去的代码片段,就是一个开源库。 十年来,前端技术推陈出新,新的开源库如雨后春笋般涌现,相信大部分读者都曾从这些开源库中受益。平日里,我们更多关注的是库的使用,很少关注库开发技术。其实,JavaScript库开发技术在这十年中也经历了快速发展,其中基于新的技术标准开发而成的库,我将其称为“现代JavaScript库”。 由于前端技术发展迅速,如今开发一个现代JavaScript库并不容易,其中涉及非常多的知识、工具和经验。比如,库如何兼容日益复杂的前端环境,库如何使用打包工具,库的单元测试如何做,等等。正因为这种复杂性,目前npm上的开源库并不都是现代JavaScript库,很多开源库还在使用十几年前的相对比较原始的技术。 除了依赖开发技术,将一个库开源还需要很多准备工作。一个库开源后的运营和维护也涉及很多知识。由于缺乏经验,很多库开源后并没有被推广开来。 总之,开发和开源一个现代JavaScript库并非易事,上述困难阻碍了很多读者开发自己的JavaScript库,我也曾被这些困难深深折磨过。经过十年的摸爬滚打,我不禁想:如果能有一个师傅手把手教我该多好,那我当初能少走多少弯路!基于此,我终于下定决心写一本现代JavaScript库开发领域的图书,将自己十年的经验总结沉淀,希望能够手把手教各位读者快速掌握现代JavaScript库开发技术。 人人都可以开发自己的JavaScript库 有人可能会问,为什么要学习JavaScript库开发技术呢?学会开发JavaScript库有什么好处呢?其实,开发JavaScript库能够带来非常多的好处。 我现身说法,开发和开源库不仅可以帮助他人解决问题,也能给自己带来很多成长。开发库的特殊要求,极大提升了我的技术深度;开发库涉及的技术非常多,极大拓宽了我的知识面;开源库使我融入了开源社区,在那里获得了很多技术之外的东西。总之,开发和开源现代JavaScript库可以带来非常大的收获,我希望每一个前端开发者都不要错过这个机会。 其实,我有一个愿望,那就是,人人都可以开发自己的JavaScript库。 再小的个体也应该有机会在社区中发声,社区不应该只要月亮的光辉,漫天繁星同样是美好世界的重要组成,只要我们愿意,每个人都可以开发属于自己的JavaScript库。 每一个前端开发者都身处两个世界,即业务世界和开源世界。大部分人熟悉业务世界,但对开源世界了解不多。所谓“技多不压身”,多了解开源世界,融入开源世界,你一定会有更多收获。 本书内容 本书主要涵盖三部分内容,可以满足读者不同阶段的学习诉求。 第1~第5章介绍如何开发和开源一个现代JavaScript库,这部分内容可以帮助读者快速达成库开发目标。 第6~第7章介绍现代JavaScript库的设计最佳实践和安全最佳实践,这部分内容可以极大提高读者开发JavaScript库的质量。 第8~第11章为实战部分,本书精选了9个典型库作为案例,带领读者了解不同类型的JavaScript库的开发要点。 其中,每章的内容分别如下。 第1章 从零开发一个JavaScript库 想要开发自己的JavaScript库,往往面临的最大挑战是不知道如何开始,不知道要做什么,不知道怎么做。本章将介绍如何找到适合自己的开发方向,并通过一个例子介绍如何从零开始开发一个JavaScript库。 第2章 构建 前端技术飞速发展,符合最新技术标准的JavaScript库就是现代JavaScript库。本章将介绍现代JavaScript库需要适配的模块系统和运行环境,开发库需要用到的打包方案,以及如何解决JavaScript库的兼容性问题。 第3章 测试 JavaScript库对于质量的要求很高,因此,完备的单元测试是质量的保证。但给库添加恰到好处的单元测试并不简单。本章将介绍如何搭建测试环境、设计测试用例、验证测试覆盖率,以及如何在浏览器环境中运行单元测试等。 第4章 开源 写好代码和单元测试还不能直接开源,要想发布一个标准库,还有很多工作要做。本章将介绍如何将JavaScript库开源,包括协议选择、文档撰写、发布到GitHub和npm上,以及如何查看开源后的数据等。 第5章 维护 将JavaScript库对外发布只是开源的第一步,开源后的运营和维护是使一个库保持持久生命力的关键。本章将介绍如何维护开源的JavaScript库,包括如何和社区协作,如何确立协作规范,如何建立持续集成和开源库的常用分支模型等。 第6章 设计更好的JavaScript库 和业务开发不同,JavaScript库一旦发布,就难以进行不兼容改动,因此,良好的设计很重要。站在巨人的肩膀上学习前人的优秀经验可以做到事半功倍。本章将介绍JavaScript开源库的最佳实践,这些实践可以帮助我们设计更好的JavaScript库。 第7章 安全防护 大部分开发者都缺乏JavaScript库安全防护方面的经验。我们常听说JavaScript库爆出安全问题,其中有些问题可以采取防护措施解决,而有些问题则让人防不胜防,那么,该如何避免这些问题呢?本章将从多个方面介绍JavaScript库的安全知识和注意事项。 第8章 抽象标准库 在开发不同的JavaScript库时会用到一些公共功能,这些功能也可以抽象为开源库,我将其称作底层库。学习底层库是开发JavaScript库的基础,因此尤为重要。本章精选6个底层库开发案例进行实战讲解,以帮助读者夯实基础。 第9章 命令行工具 在开发一个新的JavaScript库时要进行初始化,为了避免每次都从零开始进行初始化,可以开发一款命令行工具,通过一条命令快速完成初始化工作。本章将介绍如何设计和实现一款用于快速初始化的命令行工具。 第10章 工具库实战 每个项目中都存在一些公共工具函数,如果有多个项目,则可以将这部分工具函数抽象出来,做成供项目内部使用的工具函数库。本章将介绍业务项目中的工具函数库解决方案,包括工具库的搭建、开发、落地推广和数据统计。 第11章 前端模板库实战 前端模板库是一个复杂度中等的JavaScript库,和前面介绍的工具库有很大区别,是学习JavaScript库开发的推荐项目。本章将介绍前端模板库的设计和实现,以及前端模板库的生态工具开发,包括webpack插件开发和VS Code插件开发。 第12章 未来之路 温故而知新,本章将全面总结全书内容,并介绍JavaScript社区中一些新的生态和工具,帮助读者回顾本书内容,对自己所学情况进行总结。

目录

目录 第1章 从零开发一个JavaScript库 1 1.1 如何开始 1 1.2 编写代码 2 1.3 本章小结 5 第2章 构建 6 2.1 模块化解析 6 2.1.1 什么是模块 7 2.1.2 原始模块 7 2.1.3 AMD 8 2.1.4 CommonJS 9 2.1.5 UMD 9 2.1.6 ES Module 10 2.2 技术体系解析 11 2.2.1 传统体系 12 2.2.2 Node.js体系 13 2.2.3 工具化体系 14 2.3 打包方案 17 2.3.1 选择打包工具 18 2.3.2 打包步骤 19 2.3.3 添加banner 23 2.3.4 按需加载 24 2.4 兼容方案 26 2.4.1 确定兼容环境 26 2.4.2 ECMAScript 5兼容方案 28 2.4.3 ECMAScript 2015兼容方案 30 2.5 完整方案 33 2.6 本章小结 35 第3章 测试 36 3.1 第一个单元测试 36 3.2 设计测试用例 39 3.2.1 设计思路 39 3.2.2 编写代码 40 3.3 验证测试覆盖率 42 3.3.1 代码覆盖率 42 3.3.2 源代码覆盖率 44 3.3.3 校验覆盖率 46 3.4 浏览器环境测试 48 3.4.1 模拟浏览器环境 48 3.4.2 真实浏览器测试 49 3.4.3 自动化测试 51 3.5 本章小结 53 第4章 开源 54 4.1 选择开源协议 54 4.2 完善文档 56 4.2.1 README 57 4.2.2 待办清单 59 4.2.3 变更日志 59 4.2.4 API文档 60 4.3 发布 61 4.3.1 发布到GitHub上 61 4.3.2 发布到npm上 62 4.3.3 下载安装包 66 4.4 统计数据 66 4.4.1 GitHub数据 66 4.4.2 npm数据 67 4.4.3 自定义数据 69 4.5 本章小结 70 第5章 维护 71 5.1 社区协作 71 5.1.1 社区反馈 72 5.1.2 社区协作 76 5.1.3 社区运营 77 5.2 规范先行 79 5.2.1 编辑器 79 5.2.2 格式化 82 5.2.3 代码Lint 88 5.2.4 提交信息 96 5.3 持续集成 102 5.3.1 GitHub Actions 103 5.3.2 CircleCI 111 5.3.3 Travis CI 114 5.4 分支模型 115 5.4.1 主分支 115 5.4.2 功能分支 116 5.4.3 故障分支 119 5.4.4 Pull request 120 5.4.5 标签与历史 121 5.5 本章小结 123 第6章 设计更好的JavaScript库 124 6.1 设计更好的函数 124 6.1.1 函数命名 124 6.1.2 参数个数 125 6.1.3 可选参数 126 6.1.4 返回值 126 6.2 提高健壮性 127 6.2.1 参数防御 127 6.2.2 副作用处理 129 6.2.3 异常捕获 130 6.3 解决浏览器兼容性问题 131 6.3.1 String 132 6.3.2 Array 132 6.3.3 Object 134 6.4 支持TypeScript 134 6.5 本章小结 137 第7章 安全防护 138 7.1 防护意外 138 7.1.1 最小功能设计 138 7.1.2 最小参数设计 140 7.1.3 冻结对象 141 7.2 避免原型入侵 142 7.2.1 面向对象基础知识 142 7.2.2 原型之路 143 7.2.3 原型入侵 145 7.3 原型污染事件 147 7.3.1 漏洞原因 148 7.3.2 详解原型污染 148 7.3.3 防范原型污染 151 7.3.4 JSON.parse补充 152 7.4 依赖的安全性问题 152 7.4.1 库的选择 153 7.4.2 正确区分依赖 154 7.4.3 版本问题 156 7.4.4 依赖过期 157 7.4.5 安全检查 158 7.5 本章小结 160 第8章 抽象标准库 161 8.1 类型判断 161 8.1.1 背景知识 161 8.1.2 抽象库 166 8.2 函数工具 169 8.2.1 once 170 8.2.2 curry 170 8.2.3 pipe 171 8.2.4 compose 172 8.3 数据拷贝 174 8.3.1 背景知识 174 8.3.2 最简单的深拷贝 176 8.3.3 一行代码的深拷贝 178 8.3.4 破解递归爆栈 178 8.3.5 破解循环引用 180 8.3.6 性能对比 183 8.4 相等性判断 187 8.4.1 背景知识 187 8.4.2 抽象库 195 8.5 参数扩展 200 8.5.1 背景知识 200 8.5.2 抽象库 202 8.6 深层数据 205 8.6.1 背景知识 205 8.6.2 抽象库 209 8.7 本章小结 214 第9章 命令行工具 215 9.1 系统设计 215 9.2 标准命令行工具 217 9.3 交互界面 225 9.4 初始化功能 234 9.4.1 代码架构 236 9.4.2 公共逻辑 237 9.4.3 模块设计 242 9.5 命令行颜色 249 9.6 进度条 251 9.7 发布 256 9.8 本章小结 257 第10章 工具库实战 258 10.1 问题背景 258 10.2 代码实现 260 10.2.1 字符串操作 260 10.2.2 数组操作 262 10.2.3 对象操作 265 10.2.4 URL参数处理 268 10.3 搭建文档 269 10.4 ESLint插件 274 10.4.1 type-typeof-limit 276 10.4.2 type-instanceof-limit 281 10.4.3 no-same-function 282 10.4.4 recommended 284 10.4.5 发布 285 10.5 数据统计 285 10.5.1 统计接入项目 285 10.5.2 下载量 286 10.5.3 包和函数被引用的次数 287 10.6 本章小结 292 第11章 前端模板库实战 293 11.1 系统搭建 293 11.1.1 背景知识 293 11.1.2 搭建项目 295 11.2 解析器 300 11.3 即时编译器 305 11.4 预编译器 309 11.5 webpack插件 317 11.6 VS Code插件 323 11.7 发布 329 11.8 本章小结 330 第12章 未来之路 331 12.1 全景图 331 12.1.1 知识全景图 331 12.1.2 技术全景图 332 12.2 下一代技术 333 12.2.1 TypeScript 333 12.2.2 Deno 334 12.2.3 SWC 334 12.2.4 esbuild 335 12.2.5 Vite 335 12.3 本章小结 336

作者简介

编辑推荐

作者寄语

电子资料

www.luweidong.cn

下一个