虽然Java处于一个碎片化的环境,但能够使用新的语言特性也不错。因此,像Babel这样的工具会把你闪亮的标准Java代码转换成一个同旧平台兼容的版本。这个过程称为转译。这同编译没有太大的区别。使用像Babel这样的工具,你不必太过担心特定的浏览器是否支持你使用的Java特性。 转译工具不只是将ES6 Java转换成ES5。还有一些工具可以对Java的变体,如Clojure、Type和Coffee,做同样的事情。Clojure是Clojure的一个版本,可以编译成Java。Type本质上是Java,但有一个类型系统。Coffee同Java非常像,但有更闪亮的语法;由Coffee创建的许多语法糖都已经被ES6采用,这在很大程度上显得Coffee不那么有用了。所有这些都会编译成普通的Java。 那么你应该使用什么呢?如果你是前端开发的初学者,那么你也许应该编写ES6风格的Java。大部分ES6特性都得到了各浏览器供应商的广泛支持。如果你需要支持相对较老的平台,那么像Babel这样的工具可以替你将ES6编译成兼容ES5的Java。现在先不要考虑闪亮的compile-to-Java选项,如Clojure,不过,一旦你有了更多的前端开发经验,那么它们当然值得研究。 如何使用其他人的代码? 关键术语:AMD、commonJS模块、ES6模块、npm、Github 在Java中,代码共享和模块的历史有一点复杂。我强烈建议你阅读Preethi Kasireddy的文章“Java模块入门指南”来了解更多信息。 对于我们而言,术语模块和库基本上是等价的:它们代表大量的自包含代码,atv直播,我们可以在自己的项目中使用及重用。Java模块一般通过node包管理器npm发布。你可以在npm或GitHub上搜索Java模块。 模块定义(有时称为模块语法)有几种存在竞争关系的方式,主要包括CommonJS、AMD和ES6原生模块。CommonJS采用一种同步的、面向服务器的方法。相反,AMD(异步模块定义)允许你使用异步、非阻塞的方式定义和加载模块。CommonJS和AMD都是在Java没有原生支持任何模块或依赖概念的情况下创建的。 ES6增加了原生Java模块支持,它既支持CommonJS的声明式语法,又支持AMD的异步加载,还有其他一些特性。终于,模块成为现行语言的一部分。 在工作中,你很可能会遇到所有这三种类型的模块。对于新项目,你该应该使用ES6原生模块。构建工具,如webpack(下面会介绍),会帮助你在现有项目中使用各种类型的模块。 我需要Node.js吗? 关键术语:Node.js、npm、nvm Node.js是一款编写服务器端Java的工具。等一下,难道我们谈论的不只是前端Java吗? 由于Java模块通常在打包后通过node包管理器npm分享,所以你需要安装Node.js,即使你不会把它用于服务器端开发。在OS X或基于Linux的系统上,最好的方式是通过Node版本管理器nvm,这简化了不同Node.js版本的管理。Windows用户应该看下nvm-windows。 我该用什么构建工具? 关键术语:grunt、gulp、bower、browserify、webpack、“热重载(hot reloading)”、sourcemap 一个标签接一个标签地请求将每个Java依赖作为页面的一部分会很慢。因此,大多数站点都使用所谓的Java bundles。捆绑过程会获取所有依赖,并把它们“捆绑”在一起,生成一个单独的文件,包含到页面中。根据需要,有些开发人员还会使用一个“最小化(minifying)”步骤,将所有不必要的字符从Java代码中去除,而又不改变代码的功能。这可以减少客户端需要下载的数据量。 有些工具还支持诸如热重载及sourcemaps这样的特性,前者会在你保存一个文件时自动在浏览器中更新你的项目,后者提供了一个从捆绑好的Java到其原始形式的映射,简化了调试工作。 本质上讲,我刚刚描述的是一个构建过程。不管是否大多数Java开发人员都这样描述,你都是将代码编译成一个生产就绪的格式。“前端devops”或者管理构建、部署工具及依赖项的过程成为一项日益复杂的工作。 Grunt、gulp、broccoli、brunch、browserify和webpack都是Java构建工具。比较它们非常困难,因为它们每一个都致力于解决不同的问题。它们中有许多使用了不同的抽象概念来讨论相同的问题,我们实在是还没有一个共用的术语库。 根据我的经验,开发人员往往对这些工具的配置文件不甚了解,因此就在项目之间粘来粘去。下面是我为初学者库整理的webpack配置文件,供参考:
如上,该webpack配置文件指示webpack完成以下工作: 启动app.js作为入口点; 处理以.js结尾的所有文件; 使用babel-loader对它们进行转换,尤其是处理ES6转译(所以es2015 query)和JSX(所以react query); 将所有Java文件捆绑成一个文件static/bundle.js。 对于新项目,我推荐webpack。它有很强的适应性,而且能够很好地处理具有复杂依赖图的大型项目。 我如何测试代码? 关键术语:Mocha、Jasmine、Chai、Tape、Karma、Selenium、phantomjs 同许多其他类型的编程一样,前端Java可以从测试中获益。大多数Java开发人员都表示,他们至少会编写部分测试。 Java缺少一种内置的框架用于运行测试,因此,开发人员需要依赖外部库。不同的测试工具致力于问题的不同方面,这点同Java构建系统非常像。 (责任编辑:本港台直播) |