具体描述
JavaScript是现代Web开发必不可少的编程语言,但JavaScript的生态系统包括库、框架以及工具都在快速地发展且日益庞大。程序员学习的需求和面临的挑战也相应地增加。
JavaScript开发框架quanwei指南涵盖了在开发过程中常用的各种JavaScript工具,以帮助读者在大量流行的JavaScript工具中做选择。全书分为16章,从开发工具、模块加载器、客户端框架、服务端框架数据库交互、通信、管理控制流和其他有用框架等几个方面,涵盖了Bower、Grunt、Yeoman、PM2、RequireJS、Browserify、Knockout、AngularJS、Kraken、Mach、Mongoose、Knex、Bookshelf、Faye、Q、Async.js、Underscore和 Lodash等框架和库。全书涵盖了客户端和服务器端的开发,通过细致的讲解、详细的代码示例,阐明了这些工具的用法。
JavaScript是现代Web开发必不可少的编程语言,但JavaScript的生态系统包括库、框架以及工具都在快速地发展且日益庞大。程序员学习的需求和面临的挑战也相应地增加。
作者简介
Tim Ambler是来自美国田纳西州那什维尔的一名软件工程师。他对编程的热情来自于父亲。在他小的时候,他的父亲就向他介绍了Commodore 64电脑。Tim 是几个流行的开源项目的作者,其中whenLive已经被GitHub员工采用。作为会议演说家和多产的作家,Tim多次被在线出版物推荐,如JavaScript Weekly和Node Weekly。Tim目前与他的妻子和2只猫生活在南部。读者可以在Twitter上 @tkambler 关注他。
Nicholas Cloud是一名软件工程师,居住在非常潮湿的城市圣路易斯。过去十几年里,他利用自己的技能成就一番成功事业。通过JavaScript、C+和PHP,他开发了大量适用于多终端的Web应用、Web服务、桌面应用。Nicholas是开源软件的有力支持者,致力于userland项目,并写了几个自己的开源库。在业余时间,他在不同的用户组发言、参加会议、写书、写技术文章、写博客。他的Twitter是@nicholascloud。
目录信息
1.1 准备工作 1
1.2 配置Bower 2
1.3 清单文件(Manifest) 2
创建新的清单文件 3
1.4 查找、添加和删除Bower包 3
1.4.1 查找包 3
1.4.2 添加包 3
1.4.3 删除包 5
1.5 语义化版本控制 5
1.6 维护依赖链 6
1.7 创建Bower包 7
1.7.1 选择有效的包名 7
1.7.2 使用语义化版本(Semver)的
Git标签 7
1.7.3 将软件包发布到注册中心 7
1.8 小结 8
第2章 Grunt 9
2.1 安装Grunt 10
2.2 Grunt是如何工作的 10
2.2.1 Gruntfile.js 10
2.2.2 任务(Tasks) 11
2.2.3 插件(Plugins) 11
2.2.4 配置 12
2.3 将Grunt添加到项目中 12
保持合理的Grunt结构 12
2.4 与任务共舞 14
2.4.1 配置管理 14
2.4.2 任务描述 15
2.4.3 异步任务 15
2.4.4 任务依赖 16
2.4.5 多任务 16
2.4.6 多任务中的Options 17
2.7 模板配置 18
2.4.8 命令行选项 19
2.4.9 提供反馈 19
2.4.10 错误处理 20
2.5 操作文件系统 20
2.5.1 源-目标映射 20
2.5.2 监视文件变化 22
2.6 创建Grunt插件 25
2.6.1 开始 25
2.6.2 创建任务 26
2.6.3 将任务发布到npm 28
2.7 总结 28
2.8 相关资源 29
第3章 Yeoman 30
3.1 安装Yeoman 30
3.2 创建第一个项目 30
3.2.1 子命令 33
3.3 创建你的第一个脚手架 34
3.3.1 Yeoman脚手架是一个Node
模块 34
3.3.2 子脚手架 35
3.3.3 定义二级命令 39
3.3.4 可组合性 41
3.4 小结 41
3.5 相关资源 42
第4章 PM2 43
4.1 安装 43
4.2 与进程一起工作 43
4.2.1 从错误中恢复 46
4.2.2 监控文件变化 47
4.3 监控日志 48
4.4 监控资源占用 49
4.41 监控本地资源 49
4.4.2 监控远程资源 49
4.5 进程的高级管理 52
4.5.1 通过JSON方式配置应用 52
4.6 多核处理器的负载均衡 55
4.6.1 0秒宕机的部署方式 57
4.7 小结 59
4.8 相关资源 59
第5章 RequireJS 60
5.1 运行示例 61
5.2 使用RequireJS 61
5.2.1 安装 62
5.2.2 配置 62
5.2.3 应用模块和依赖 64
5.2.4 路径和别名 66
5.2.5 Shims 69
5.2.6 加载器插件 73
5.2.7 缓存清除 78
5.3 RequireJS优化 80
5.3.1 配置 r.js 80
5.3.2 运行r.js命令 81
5.4 小结 82
第6章 Browserify 84
6.1 AMD API与CommonJS对比 84
6.2 安装Browserify 85
6.3 创建你的第一个Bundle 85
6.4 可视化依赖树 87
6.5 发生变化时重新打包文件 88
6.5.1 通过Grunt监听文件变化 88
6.5.2 通过Watchify监听文件
变化 88
6.6 使用多个打包文件 90
6.7 Node方式 92
6.7.1 模块解析方案和NODE_PATH
环境变量 93
6.7.2 依赖管理 95
6.8 定义浏览器指定模块 96
6.9 用Transforms扩展Browserify 97
6.9.1 brfs 97
6.9.2 folderify 98
6.9.3 bulkify 98
6.9.4 Browserify-Shim 99
6.10 小结 100
6.11 相关资源 100
第7章 Knockout 101
7.1 View、Model与View Model 102
7.1.1 菜谱列表 103
7.1.2 菜谱详情 106
7.2 绑定视图模型到DOM 108
7.3 视图模型与表单 109
7.3.1 切换到“编辑”模式 109
7.3.2 更改菜谱的标题 112
7.3.3 更改菜谱的Serving与
Cooking Time 112
7.3.4 添加与删除食材 114
7.3.5 操作步骤 118
7.3.6 引文 119
7.4 自定义组件 120
7.4.1 input-list组件的视图模型 120
7.4.2 input-list模板 121
7.4.3 注册input-list组件 123
7.5 Subscribable: 简单的消息传递 124
7.6 小结 126
7.7 相关资源 127
第8章 AngularJS 128
8.1 声明式Web编程 128
8.1.1 命令式编程 128
8.1.2 声明式编程 129
8.2 Module:创建松散耦合程序的基石 130
8.3 指令:DOM的抽象 132
8.4 加入逻辑 134
8.4.1 Scope与原型继承 134
8.4.2 用Controller操作Scope 135
8.5 通过Service与依赖注入(DI)
实现松散耦合 138
8.5.1 依赖注入 138
8.5.2 简单的Controller与复杂的
Service 139
8.6 创建路由 142
8.6.1 路由参数 143
8.6.2 路由的Resolve 144
8.7 创建复杂表单 145
8.7.1 表单验证 146
8.7.2 条件逻辑 150
8.7.3 列表 151
8.8 小结 153
8.9 相关资源 154
第9章 Kraken 155
9.1 环境感知的配置 156
9.2 注册基于配置的中间件 162
9.3 结构化路由注册 165
9.3.1 索引配置 165
9.3.2 目录配置 166
9.3.3 路由配置 167
9.4 Dust模板 169
9.4.1 上下文及引用 169
9.4.2 片段 171
9.4.3 迭代 172
9.4.4 条件句 173
9.4.5 局部模板 173
9.4.6 块 174
9.4.7 过滤器 175
9.4.8 上下文辅助器 176
9.4.9 Dust辅助器 182
9.4.10 使用Kraken 186
9.5 小结 200
9.6 相关资源 200
第10章 Mach 202
10.1 章节例子 202
10.2 安装 203
10.3 Mach - Web服务 203
10.3.1 HTTP路由 205
10.3.2 建立连接 210
10.3.3 公共的中间件 212
10.3.4 路由重写 226
10.3.5 主机映射 228
10.3.6 自定义中间件 232
10.4 Mach-HTTP客户端 234
10.5 Mach - HTTP代理 236
10.6 小结 239
第11章 Mongoose> 240
11.1 MongoDB的基本概念 240
11.2 Mongoose的一个简单示例 243
11.2.1 针对JSON数据创建一个
Mongoose模式 243
11.2.2 使用Mongoose导入数据 244
11.2.3 通过Mongoose查询数据 247
11.3 使用结构(Schemas) 248
11.3.1 数据类型 248
11.3.2 嵌套结构 250
11.3.3 默认属性值 250
11.3.4 必要属性 251
11.3.5 辅助索引 251
11.3.6 结构校验 252
11.3.7 结构引用 255
11.3.8 结构中间件 258
11.4 使用模型和文档 259
11.4.1 文档实例方法 262
11.4.2 文档虚拟 263
11.4.3 静态模型方法 265
11.5 使用查询 266
11.5.1 Model.find() 266
11.5.2 使用查询运算符查找文档 272
11.6 小结 278
第12章 Knex和Bookshelf 279
12.1 Knex 279
12.1.1 安装命令行工具 280
12.1.2 把Knex添加到你的项目 280
12.1.3 配置Knex 280
12.1.4 SQL查询构建器 281
12.1.5 迁移脚本 287
12.1.6 种子脚本 291
12.2 Bookshelf 291
12.2.1 什么是对象映射关系? 292
12.2.2 创建Bookshelf模型 292
12.2.3 关系 299
12.3 小结 306
12.4 相关资源 307
第13章 Faye 308
13.1 HTTP、Bayeux和WebSocket 308
13.1.1 WebSocket 310
13.1.2 Bayeux协议 310
13.2 开始使用Faye 312
13.3 发布/订阅消息系统 313
13.4 小结 318
13.5 相关资源 318
第14章 Q 319
14.1 时间就是一切 319
14.2 Promise对比回调函数 322
14.3 Q的Promise 324
14.3.1 Deferreds 和 Promises 324
14.3.2 值和错误 328
14.3.3 报告进度 333
14.3.4 终点 336
14.4 控制流 338
14.4.1 顺序流 338
14.4.2 平行流 339
14.4.3 管道流 341
14.5 小结 342
14.6 相关资源 343
第15章 Async.js 344
15.1 顺序流 345
15.2 并行流 346
15.3 管线流 348
15.4 循环流 352
15.4.1 为真则循环执行 352
15.4.2 为假则循环执行 354
15.4.3 循环重试 355
15.4.4 无限循环 357
15.5 批处理流 358
15.5.1 异步队列 358
15.5.2 异步负载 359
15.6 小结 361
第16章 Underscore和Lodash 362
16.1 安装及用法 363
16.2 聚合和索引 364
16.2.1 countBy() 364
16.2.2 groupBy() 365
16.2.3 indexBy() 366
16.3 选择 367
16.3.1 从集合中选择数据 367
16.3.2 从对象中选择数据 369
16.4 链式调用 373
16.5 函数计时 375
16.5.1 defer() 375
16.5.2 debounce() 377
16.5.3 throttle() 378
16.6 模板 380
16.6.1 模板内的循环及其他
JavaScript代码 381
16.6.2 书写不加鳄鱼标记的代码 382
16.6.3 从模板中获取数据对象 383
16.6.4 默认模板数据 384
16.7 小结 385
16.8 相关资源 386
· · · · · · (收起)
读后感
JavaScript Frameworks for Modern Web Devis your guide to the wild, vast, and untamed frontier that is JavaScript development. The JavaScript tooling landscape has grown and matured drastically in the past several years. This book will serve as an introducti...
JavaScript Frameworks for Modern Web Devis your guide to the wild, vast, and untamed frontier that is JavaScript development. The JavaScript tooling landscape has grown and matured drastically in the past several years. This book will serve as an introducti...
JavaScript Frameworks for Modern Web Devis your guide to the wild, vast, and untamed frontier that is JavaScript development. The JavaScript tooling landscape has grown and matured drastically in the past several years. This book will serve as an introducti...
JavaScript Frameworks for Modern Web Devis your guide to the wild, vast, and untamed frontier that is JavaScript development. The JavaScript tooling landscape has grown and matured drastically in the past several years. This book will serve as an introducti...
JavaScript Frameworks for Modern Web Devis your guide to the wild, vast, and untamed frontier that is JavaScript development. The JavaScript tooling landscape has grown and matured drastically in the past several years. This book will serve as an introducti...
用户评价
这本书的阅读体验简直是出乎意料的,当初抱着学习JavaScript开发框架的初衷购入,本以为会是一本硬邦邦的技术手册,充斥着各种API和代码片段,但实际拿到手翻开之后,才发现它的深度和广度远远超出了我的预期。首先,作者在开篇就对JavaScript的演进历程进行了梳理,这部分内容看似是“背景知识”,但实则至关重要,它为理解当前各种框架诞生的逻辑和设计理念奠定了坚实的基础。我一直觉得,脱离了历史背景去理解技术,就像是无根之木,很难真正抓住事物的本质。而这本书恰恰在这方面做得非常出色,它没有简单地罗列框架,而是深入剖析了在不同时代背景下,开发者们遇到了哪些痛点,以及是如何通过框架来解决这些问题的。这种由点到线,再由线到面的讲述方式,让我能够更清晰地看到JavaScript生态系统的发展脉络。
在深入介绍具体的框架时,作者并没有急于求成,而是循序渐进地展示了每个框架的核心思想和设计哲学。我特别喜欢作者对于“为什么”的解释,而不是仅仅告诉我“怎么做”。例如,在讲解某个组件化框架时,它详细地阐述了为什么需要组件化,组件化能够带来哪些好处,以及在实践中可能遇到的挑战。这种深入的思考过程,远比单纯的代码示例更能帮助我理解框架的精髓。而且,作者还非常细致地对比了不同框架在处理同一类问题时的不同策略,例如数据管理、路由、状态提升等等。这种“横向比较”让我在面对多个框架时,能够更清晰地辨析它们的优劣势,从而根据实际项目需求做出更明智的选择。我个人在实际工作中经常会面临技术选型的困境,而这本书无疑为我提供了一个非常宝贵的参考维度。
从整体而言,这本书给我带来的不仅仅是技术的知识,更是一种解决问题的思维方式和学习方法。作者在书中展现了一种非常清晰、严谨的逻辑,以及对技术的热情和深刻理解。我感觉自己不仅仅是在阅读一本关于JavaScript开发框架的书,更是在与一位经验丰富的技术导师进行对话。他不仅教会了我“做什么”,更教会了我“为什么这样做”,以及“如何做得更好”。这种启发式的学习方式,让我在面对新的技术和问题时,能够更加自信和有条理。这本书的价值,远不止于其内容本身,更在于它所激发的学习动力和思维模式的转变。
这本书最让我印象深刻的一点是,它并没有停留在对现有框架的介绍和分析上,而是通过大量的案例和实践,引导读者思考如何“用好”这些框架,甚至是如何“创造”出更适合自己项目的解决方案。作者在书中引入了许多实际项目中常见的场景,并展示了如何利用框架的特性来高效地解决这些问题。这部分内容让我觉得非常接地气,也让我看到了将理论知识转化为实际生产力的可能性。我尤其欣赏作者对于“最佳实践”的总结和提炼,这些并不是凭空而来,而是经过了大量的项目经验打磨出来的宝贵财富。读完之后,我感觉自己不仅仅是学会了如何使用一个框架,更是掌握了一套解决问题的思维模式和方法论。
最让我感到惊喜的是,作者在书中提到了许多关于“社区”和“生态系统”的讨论。在当今的软件开发领域,一个框架的生命力往往取决于其背后的社区支持和丰富的生态系统。这本书并没有回避这一点,而是深入探讨了如何评估一个框架的社区活跃度,以及如何利用社区资源来解决开发中遇到的问题。这对于开发者来说,是一个非常重要的考量因素。我之前往往只关注框架本身的功能,而忽略了其生态环境的重要性。通过这本书,我才意识到,一个强大的社区能够为开发者提供持续的动力和源源不断的解决方案,这对于项目的长期发展至关重要。
对于新手开发者来说,这本书的入门体验非常友好。虽然主题是“开发框架”,但作者在初期就花了不少篇幅来讲解JavaScript语言本身的一些进阶概念,比如异步编程、模块化以及ES6+的新特性。这些内容对于构建坚实的JavaScript基础至关重要,也是后续理解复杂框架的基础。作者的讲解方式非常清晰易懂,避免了晦涩难懂的术语,而是通过生动的例子来解释抽象的概念。我身边的一些初入前端领域的朋友,在阅读了这部分内容后,都表示对JavaScript有了更深刻的理解,并且不再畏惧复杂的框架。这一点非常难得,很多技术书籍往往会忽略语言基础的重要性,而这本书却做到了很好的平衡。
在阅读过程中,我发现作者在代码示例的选择上也非常讲究。这些示例不仅仅是为了演示某个API的使用,更是为了说明某个设计理念或者解决某个实际问题的关键步骤。而且,作者还对这些示例进行了详细的解释,包括每行代码的作用,以及它们是如何协同工作的。这对于我这样的开发者来说,非常有帮助。我经常会遇到这种情况:看到一个代码片段,知道它能做什么,但不知道为什么能这样做。这本书恰恰弥补了我的这种认知上的不足。此外,作者还鼓励读者动手实践,提供了许多可以自行探索的练习,这极大地增强了我的学习主动性。
这本书的结构设计非常合理,它并不是简单地堆砌内容,而是层层递进,由浅入深。从JavaScript基础概念的复习,到主流开发框架的深度剖析,再到进阶主题如性能优化和架构模式,整个知识体系的构建非常完整。而且,作者在不同章节之间的衔接也非常自然,不会让人感到突兀。我尤其欣赏作者在介绍新概念时,会回顾之前讲解过的内容,或者预示接下来会讲到的知识点,这使得整个学习过程非常有条理,也更容易形成完整的知识闭环。我曾尝试过阅读一些结构混乱的技术书籍,结果常常是顾此失彼,而这本书在这方面做得非常出色。
这本书不仅仅是一本技术手册,更像是一本思想启蒙读物。它让我开始重新审视自己对“框架”的理解。我过去可能会认为框架就是一套现成的代码,用来简化开发过程。但这本书通过深入分析框架的设计理念和演进过程,让我认识到框架背后所蕴含的设计模式、架构思想,甚至是对软件工程的哲学思考。作者在讲解时,并没有局限于某个特定的框架,而是从更宏观的角度来分析不同框架的共性和差异,以及它们在解决特定问题时的不同侧重点。这种“大局观”让我能够更理性地看待技术的发展,不被某个框架的光环所迷惑,而是能够根据项目的实际需求,选择最合适的工具。
不得不说,这本书对于前端性能优化方面的讲解,着实让我眼前一亮。在很多技术书籍中,性能优化往往是被一带而过的,或者只是简单地提及一些基础概念。然而,这本书却对此进行了非常深入的探讨,从浏览器渲染原理到JavaScript执行机制,再到具体的框架优化技巧,都进行了详尽的阐述。作者不仅解释了为什么会出现性能瓶颈,更重要的是,它提供了切实可行的解决方案,并且详细说明了这些解决方案背后的原理。这让我能够理解“知其然,更知其所以然”,从而在实际开发中能够更有效地识别和解决性能问题。我感觉在阅读这本书之前,我对性能优化的理解还停留在表面,而这本书则将我的认知提升到了一个全新的高度。
适合新手快速聚焦每个框架的关键点
基本上和Baidu出来的差不多 走马观花介绍性质 没什么思想性能固化下来的
基本上和Baidu出来的差不多 走马观花介绍性质 没什么思想性能固化下来的
适合新手快速聚焦每个框架的关键点
基本上和Baidu出来的差不多 走马观花介绍性质 没什么思想性能固化下来的