关于本书

关于本书

Web开发的增长速度异乎寻常,现在很难想象没有Web的世界会是什么样子。Web以其容错性而著称。在传统编程技术中,缺少一个分号、忘记关闭标签或者声明无效的属性都会导致严重的后果,但Web中却有所不同。在Web中可以犯错,但错误的生存空间越来越少。之所以出现这种二元现象,是因为现代的Web应用和以前相比,要复杂一个数量级。在Web发展初期,我们可能会使用JavaScript适当地小幅度修改网页,但在现在的Web中,整个网站都使用JavaScript驱动,在单个页面中渲染。

这是一本指南书,会告诉你如何在现代的环境中使用更好的方式做Web开发,就像使用其他语言做开发一样,编写出可维护的JavaScript应用。你将学习如何利用自动化技术取代容易出错的繁复过程,如何设计易于测试的模块化应用,以及如何测试应用。

过程自动化是整个开发过程中节省时间的关键所在。在开发环境中使用自动化技术能帮助我们把精力集中在思考问题、编写代码和调试上。自动化技术有助于确保每次存入版本控制系统中的代码能正常运行。准备把应用部署到生产环境时,使用自动化技术能节省时间,自动化技术能打包、简化资源文件、创建子图集表单,还能执行其他性能优化措施。部署时,自动化技术还能减少风险,自动完成复杂且容易出错的操作。很多书讨论的都是后端语言使用的过程和自动化技术,很难找到针对JavaScript应用的资料。

本书主要想表达的观点是要注重质量。使用自动化技术能搭建一个更好的应用构建环境,但光有自动化技术还不够,应用本身也要有质量意识。为此,本书涵盖了应用设计的指导方针,先介绍语言相关的注意事项,然后告诉你模块化的强大作用,再帮你厘清异步代码,教你开发客户端MVC应用,最后为JavaScript代码编写单元测试。

本书和其他讲解Web技术的书一样,依赖于特定版本的工具和框架,不过本书把代码库相关的问题和所需掌握的理论区分开了。这是种妥协的做法,因为Web开发领域使用的工具频繁变化,但工具的设计理念和操作过程的变化节奏要慢得多。我把这两方面分开了,希望这本书在未来几年仍有价值。

本书结构

本书包含两部分和四篇附录。第一部分专门介绍构建优先原则,告诉你这个原则是什么,以及如何辅助你的日常工作。这一部分详细说明过程自动化,涵盖日常开发和自动部署,还有持续集成和持续部署包,共含4章。

  • 第1章说明构建优先原则的核心法则,以及可以建立的不同过程和流程。然后介绍贯穿全书的应用设计指导方针,这些方针是后续内容的基础。

  • 第2章介绍Grunt,以及如何使用Grunt制定构建流程。然后介绍几个可以使用Grunt轻易完成的构建任务。

  • 第3章专门介绍环境和部署流程。你会发现不是所有环境都是一样的,应该学习在开发环境中如何权衡调试便利性和生产力。

  • 第4章示范发布流程,还会讨论部署相关的话题。你会学到几个针对性能优化的构建任务,并探索如何自动部署。你还会学习把应用部署到生产环境后如何连接持续集成服务,以及如何监控应用。

第一部分主要介绍如何使用Grunt构建应用,附录C会教你如何选择最符合任务需求的构建工具。读完第一部分后,该读本书第二部分了。第二部分专门介绍如何管理应用设计过程中的复杂度。模块、MVC、异步代码流、测试和设计良好的API在现代的应用中都扮演着重要角色,这些话题在下面几章中讨论。

  • 第5章主要介绍如何开发模块化的JavaScript应用。这一章首先说明模块的构成,以及如何设计模块化的应用,还会列出这么做的好处。随后,简要说明JavaScript语言的词法作用域和怪异的地方。然后,概览实现模块化的主要方式:RequireJS、CommonJS和即将到来的ES6模块系统。最后,介绍几个包管理方案,例如Bower和npm。

  • 第6章介绍异步代码流。如果你曾陷入到回调之坑中,这一章可能会为你提供摆脱这一困境的方法。这一章讨论了处理异步代码流中复杂度的多种方式,分别为回调、Promise对象、事件和ES6的生成器。你还会学到如何在这些范式中正确处理错误。

  • 第7章首先介绍MVC架构,然后将其应用到Web中。你会学习如何借助MVC分离关注点,使用Backbone开发富客户端应用。随后,你会学习Rendr,使用它在服务器端渲染Backbone视图,优化应用的性能和可访问性。

  • 现在你的应用已经模块化,外观精美,而且易于维护,接下来在第8章自然就该使用不同的方式测试应用了。为此,我会介绍各种JavaScript测试工具,并传授使用这些工具测试小型组件的实践经验。然后,我们要为第7章使用MVC架构开发的应用编写测试。我们不仅要做单元测试,还会学习持续集成、外观测试和性能评估。

  • 第9章是本书最后一章,专门介绍REST API设计。API供客户端与服务器交互,而且为我们在应用中所做的一切奠定基础。如果API复杂得令人费解,那么整个应用有可能也是如此。REST为API的设计给出了明确的指导方针,能确保API简单明了。最后,我们会介绍如何使用传统方式在客户端使用API。

你可以在读完正文后再阅读附录,不过,在你遇到问题时就及时阅读更能发挥附录的作用,因为附录可能会为你的疑问提供解答。在正文中,如果某处需要使用附录的内容补充,我会指出来。

  • 附录A简要介绍Node.js和其使用的模块系统CommonJS。这个附录能帮你解决安装Node.js的问题,还会解答一些关于CommonJS工作方式的疑问。

  • 附录B详细介绍Grunt。第一部分中的几章只说明了使用Grunt必备的知识,而这个附录则详细说明了Grunt的内部工作机制。如果你真想使用Grunt开发一个成熟的构建过程,这个附录能为你提供一些帮助。

  • 附录C明确表明了本书和Grunt没有任何“联姻”,给出了两个替代工具——Gulp和npm run。这个附录分析了这三个工具各自的优缺点,让你自己决定哪个最符合你的需求。

  • 附录D是一个JavaScript代码质量指南,列出了大量最佳实践,你可以选择该遵守哪些。我的目的不是强制你遵守这些指导方针,而是要让你明白,在开发团队中保持代码基的一致性是件好事。

代码约定和下载

所有源码都使用等宽字体表示,例如fixed-size width font,而且有时源码会放在一个有名称的代码清单中。很多代码清单中都有注解,用于体现重要的概念。本书的配套源码是开源的,公开托管在GitHub中,如果想下载,请访问github.com/buildfirst/buildfirst。这个在线仓库中的源码始终都是最新版。虽然书中给出的代码有限,但在仓库中都有很好的注释,如果遇到问题,我建议你看一下带注释的代码。

代码还可以从出版社的网站中下载,地址是www.manning.com/JavaScriptApplicationDesign

作者在线

购买本书英文版的读者可以免费访问由Manning出版社维护的在线论坛,在这个论坛中你可以对本书发表评论、询问技术问题、从作者和其他用户那里得到帮助。要访问并订阅该论坛,请访问www.manning.com/JavaScriptApplicationDesign。这个页面介绍了注册后如何访问论坛、可以得到什么帮助以及在论坛中的行为准则。

Manning致力于为读者提供一个场所,让读者之间、读者和作者之间能进行有意义的对话。但我们并不强制作者参与,他们在论坛上的贡献是自愿而且不收费的。我们建议你尽量问作者一些有挑战性的问题,免得他失去参与的兴趣!

只要本书英文版仍然在售,读者就能从出版社的网站上访问作者在线论坛和之前讨论话题的存档。

目录

  • 版权声明
  • 献词
  • 前言
  • 关于本书
  • 关于封面
  • 致谢
  • 第一部分 构建过程
  • 第 1 章 构建优先
  • 第 2 章 编写构建任务,制定流程
  • 第 3 章 精通环境配置和开发流程
  • 第 4 章 发布、部署和监控
  • 第二部分 管理复杂度
  • 第 5 章 理解模块化和依赖管理
  • 第 6 章 理解JavaScript中的异步流程控制方法
  • 第 7 章 使用模型-视图-控制器模式
  • 第 8 章 测试JavaScript组件
  • 第 9 章 REST API设计和分层服务架构
  • 附录 A Node.js的模块
  • 附录 B 介绍Grunt
  • 附录 C 选择合适的构建工具
  • 附录 D JavaScript代码质量指南