Node.js:CoffeeScript学习
CoffeeScript 解决了 JavaScript 痛点。
CoffeeScript:
- 提供一种比较简单的语法,减少了样板代码,诸如括号和逗号
- 使用空格作为一种组织代码块的方法
- 提供拥有表达函数的简单语法
- 提供基于类的继承(可选项,但是在进行应用程序开发时非常有用)
您可能会想,相较于 JavaScript,CoffeeScript 肯定有一些劣势,因为它的语法比较抽象。
1.例如,CoffeeScript 会不会比 JavaScript 更慢?会不会需要一个较大的运行时库?
实际上,CoffeeScript 将编译成简洁、高效的 JavaScript,您总能清楚地看到正在编译的内容,因此,您可以很自信没有引入过多的东西。
2.此外,因为 CoffeeScript 将完全编译成函数式 JavaScript,所以不需要任何类型的运行时库。
CoffeeScript 所提供的语法允许您充分利用 JavaScript 的强大功能,而只需要较小的运行时开销。
若要安装 CoffeeScript,需要先安装 Node.js,因为:
- CoffeeScript 使用节点的包管理程序 NPM,作为 Node.js 的一个包进行分布。
- CoffeScript 必须被编译,其编译器实际上就是使用 CoffeeScript 编写的,所以,需要一个 JavaScript 运行时来完成其编译。作为 Node.js 核心的 V8 JavaScript 虚拟机很适合这一任务。
开始安装:
1.通过npm安装coffeescript
npm install --global coffee-script。
--global 标记使 CoffeeScript 可广泛用于系统,而不仅仅用于特定项目。
NPM 在 /usr/bin 中创建了一个快捷键,因此,现在可执行 Coffee 位于正确的路径中,这就是 CoffeeScript 编译器和解释器。
若要验证可执行 coffee 是否位于路径中,在命令行运行
coffee -v
每个Node.js模块都同样操作:
- 为了使模块可用于任何已启动的 Node.js 进程,您需要将其添加到 Node.js 的 NODE_PATH 中。
- 在遇到不能识别的函数时,Node.js 将搜索 NODE_PATH 获取模块(库)。
- 可以将 Node.js 作为可执行 CoffeeScript 运行时来使用。最简单的方法是仅将所有 NPM 模块添加到 NODE_PATH。
要找出 NPM 模块的位置,输入
npm ls -g
需要添加一个环境变量将 NODE_PATH 指向其位置。例如,如果 npm ls -g 输出 /usr/lib,那么模块则位于 /usr/lib/node_modules。要设置一个 NODE_PATH 环境变量,运行
export NODE_PATH=/usr/lib/node_modules。
可以通过将上述命令放入启动脚本(比如说 ~/.bash_profile)中来流水线化这些操作。若
要验证更改,通过执行 Node 启动一个 Node.js shell,然后输入 require('coffee-script')。Node.js shell 会加载 CoffeeScript 库。
2.运行
$ coffee cup0.coffee
输入 coffee -c 即可编译成js文件
自动编译
coffee -w --output lib --compile src
这里假设你的coffee代码在src目录下,这个daemon会自动检测文件的改变,并编译成js文件放到lib目录下
其他参数详解:http://coffeescript.org/
3.REPL
REPL 是一个在许多编程语言中,特别是在各种函数式语言中都能找到的标准工具。
REPL 就相当于 Ruby 的 IRB,只需输入 coffee就会启动 CoffeeScript 的 REPL。(命令行工具)
4.动态编译(影响性能)
例子:
<html> <head> <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"> </script> <script src="http://jashkenas.github.com/coffee-script/extras/coffee-script.js"> </script> <script type="text/coffeescript"> gcd = (a,b) -> if (b==0) then a else gcd(b, a % b) $("#button").click -> a = $("#a").val() b = $("#b").val() $("#c").html gcd(a,b) </script> </head> <body> A: <input type="text" id="a"/><br/> B: <input type="text" id="b"/><br/> <input type="button" value="Calculate GCD" id="button"/> <br/> C: <span id="c"/> </body> </html>
- 该网页使用了 Google 的 Ajax 库来加载 jQuery,从 CoffeeScript 的创建者 Jeremy Ashkenas 的 Github 资源库(参见 参考资料)载入 CoffeeScript 编译器库。
- 该代码包含了一个脚本块,不过它的类型并非 text/javascript,而是 text/coffeescript,这就是 CoffeeScript 编译器如何知道要编译的脚本内容。
- 该脚本接着创建了一个名为 gcd 的函数,该函数计算两个整数的最大公约数。
- jQuery 被用来为页面上的按钮创建单击处理程序,您可以从处理程序中获取两个文本输入域的值,并把它们传递给函数 gcd,计算所得的结果被写回到网页中。
- $()、val() 和 html() 等均是 jQuery 函数,但可以轻易地和 CoffeeScript 结合使用,并利用 CoffeeScript 简洁语法的优势。
5.与JS框架整合:
上面的例子很好的结合了jQuery,让代码更简洁