本文是Twitter软件工程师Bonnie Eisenman对JS现状的看法和对开发者的一点建议
01
关于框架
框架的目标是减少繁琐的工作,是基础的脚手架工具 很多流行框架都针对一个问题: “我如何创建一个支持复杂用户交互的单页应用,并且可以在前端管理我的业务逻辑?” 单页应用特点是无需页面跳转刷新,例如 Facebook首页、Gmail邮箱 应该使用哪个框架呢?React? Angular? Ember? 这些框架都是用来帮助你更好的开发应用,没有一个确切的答案说是应该用谁 如果你是刚起步的JS开发者,可能都不需要框架,用jquery就很好了,可能会枯燥,但可以让你更好的了解JS是如何工作的 如果开发复杂一些的网站,就建议考虑下React、Angular、Ember 现在框架太多,比较起来不容易,建议看一个网站 http://todomvc.com TodoMVC用不同的框架实现了同一套TODO功能,便于大家对不同框架进行对比 个人推荐 React/Angular Lodash
02
应该使用哪种Javascript?
Javascript 不是一个单一的语言,每个浏览器有自己的JS引擎,在不同浏览器和版本之间产生了不少差异 兼容性问题比较麻烦,http://caniuse.com 这个网站给出了各个API在不同浏览器下的支持情况 ES6 是最新的JS规范,引入了一些新的语法和功能,例如 箭头符、类、本地模块、模板字符串 …… http://blog.teamtreehouse.com/get-started-ecmascript-6 这个网站是个很好的ES6入门读物 尽管JS有着不同的运行环境,但并不影响使用ES6新特性,因为有了像Babel这类很棒的工具,可以把你的代码转换为兼容各个平台的代码 JS还有一些变体,例如 ClojureScript、TypeScript、CoffeeScript ClojureScript 是Clojure转换到JavaScript,而Clojure是一种运行在Java平台上的Lisp方言 TypeScript 本质上就是JavaScript,带有一套类型系统,因为JS本身无类型,TypeScript变添加了类型,使其更加标准 CoffeeScript 也很接近JavaScript,添加了很多语法糖,有些已经被ES6采用 那么如何选择? 建议使用ES6,因为各个浏览器的支持度越来越好,并且还有Babel这类的工具能够帮你
03
用什么build工具?
请求每个JS的依赖通常是一个script tag接着一个script tag,很慢 所以出现了JS bundle的概念,把所有依赖都放到一个文件中,并压缩 有些工具还支持 hot reloading 和 sourcemaps hot reloading 当文件内容变化时,在浏览器中动态更新文件 sourcemaps 使debug更加容易,使bundle回到原始形式 Grunt、gulp、broccoli、brunch、browserify、webpack 都是JS build工具 他们每个都侧重于解决不同的问题,不好比较 对于新项目,我个人建议使用 webpack,因为他已经被广泛采用,可以处理具有复杂依赖关系的大型应用
04
如何测试?
JS的测试越来越重要,JS本身没有测试框架,需要依赖外置库 Mocha和Jasmine是两个主流库,你来定义预期行为,然后进行断言 对于运行测试,Mocha提供了命令行工具,而Jasmine没有,很多开发者使用Karma,他是一个test runner,Mocha和Jasmine的测试都可以使用Karma运行 我个人的建议是 Karma Jasmine,如果需要用到浏览器测试时,使用PhantomJS PhantomJS 是一个没有界面的浏览器,常用来配合自动测试 还有一些其他有用的测试工具: Selenium 可以在浏览器中进行真实的集成测试 Sinon 对于AJAX请求类型的测试很有帮助 你也可以建立一套持续集成系统,使用 Jenkins 或 Travis 参考原文 http://www.infoq.com/articles/state-of-javascript-2016