Node.js 基于JavaScript编写应用,JavaScript是我的主要开发语言。CoffeeScript是编译为JavaScript的编程语言。其实CoffeeScript语言因其可以一对一的翻译为JavaScript的特性,使用起来也非常灵活。将其引入项目的方式也有很多种,在此,我将使用coffeescript编写node.js项目的方法做一个汇总。
直接使用coffee指令运行纯coffeescript项目
一般提起coffeescript,自然而然地会想到他是javascript的小弟,总脱离不了js的阴影。其实你完全可以把它认作是独立的语言。 我们都知道,在node平台上全局安装完coffee-script包后,就可以通过coffee指令进入coffeescript的交互界面, 叫它repl也行。如果你的项目完全是用coffee写的,那就简单了,直接对你的入口脚本使用coffee指令就结了, 比如你的入口脚本名为“app.coffee”,那就执行:
coffee app.coffee
这个方式应该说是使用coffeescript最“官方”的方式。简单,直接!而且,一旦你以一个coffee文件作为项目的入口, 那整个项目就同时兼容coffee和js了。你在项目里可以任意require js或coffee文件及模块, 甚至可以在项目中的js文件中随便require coffee文件。并且在你引用无论是coffee还是js文件的时候都无需扩展名, 只要前面部分名称不冲突就行。
这个方式有个最大的问题就是,如果它作为一个模块,只能被用于coffee项目;如果他作为一个应用, 运行环境必须安装coffee-script。毕竟coffeescript现在还是一个小众语言,它作为模块时丧失了js用户实在可惜。
另一个也许存在的缺点是性能方面的,毕竟node里面只有js引擎,coffee代码需要先编译为js再运行, 这个过程是要消耗一点点时间的,尽管coffee到js的编译速度其实挺快的。不过这应该不是什么大问题, 一般来说,require都是写在文件的顶部,也就是应用在启动的时候就一气儿把该require的文件都require了, require的时候coffee就被编译成了js放到了js引擎中,那么编译消耗的那点时间都集中在了应用启动时, 运行时几乎不会遇到require新的coffee的情况了。node最常见的使用场景是web服务器,这就更没问题了。
在javascript项目中引用coffeescript
npm中的coffee-script既可以全局安装,也可以作为项目的一个模块安装。那coffee-script作为项目的一个模块有啥意义呢? 其实是给项目添加了一个coffeescript的编译器,这个项目就可以在运行时随时编译coffee文件。
你一定希望像第一种方式里那样随便引用coffee文件。没问题,只需要注册一下。假如你的项目入口文件是app.js, 那么只需要在这个文件最前面加上这么一句:
require('coffee-script/register');
这个方式本质上和第一种方式没啥区别,只不过coffee-script没安装在全局,因此你的模块可以独立存在, 作为应用也不需要环境安装好coffee-script了。
缺点嘛,我觉得最大的问题就是容易让代码有些乱,一会儿js,一会儿coffee,当然第一种方式也可能会这样, 不过都用coffee启动了里面应该不会写js了吧……总之我觉得一个项目还是把语言统一起来比较好 (遗憾的是我主要用这种方式,在一个已经用js写出了大体结构的项目里,我就想用coffee肿么办……)
性能问题上跟第一种方式一样,不多说了。
正统的方式——编译
一说编译,就感觉回到了正儿八经的C或Java的时代。的确,作为一个编译型语言,编译后再运行才是正道。 c有gcc,java有javac,cofee有coffee -c。
要编译一个cofee文件很简单,比如要编辑app.coffee这个文件,就在文件的当前目录执行:
coffee -c app.coffee
coffee -c src
不过对于大型项目,把源文件和编译结果文件放到一起可不太好。指定一个输出目录就行了:
coffee -c -o outputs src
coffee [options] path/to/script.coffee -- [args]
注意,所有的选项(options)都在coffee和文件路径之间。而最后的args是把目标文件作为脚本执行时给传递的参数。 也就是说所有的选项都放在coffee和文件名之间就可以了。 而-c这个选项是单独的,没有自己的参数,它只表示要把指令最后面提供的那个文件给编译了,所以写成这样也行:
coffee -o outputs -c src
coffee -o outputs -c -b src
coffee -o outputs -c -j out src
coffee -o outputs -c -w src
offee提供了一个自动化构建工具,cake,就像c世界的make。 不过就像官网上说的那样,cake是一个很简单的构建系统。实际上cake的功能就是执行一个名为cakefile的脚本, 而cakefile脚本是用coffeescript写的。这个脚本只提供非常有限的内建函数,比如task, 用于声明一个指令及其对应的描述和执行函数。其它的就是在写一个纯粹的node项目, 想完成编译要么使用node的fs模块输出coffee模块编译出来的字符串, 要么用child_process模块执行shell指令。其实cake构建的目标不一定必须是coffee,由于它实际是执行一个node脚本, 处理任何自动化的事情都可以。
另外还有一些更优秀的第三方自动化构建工具也可以完成coffee的自动编译,比如著名的Grunt,以及国内的fekit等。
这种正统的编译方式也许是看起来最可靠的,应该深受老程序员的喜爱。它可以让团队形成固定的开发模式。 另外,编译后的项目就成了纯的js项目,无论是作为应用直接运行还是作为模块被别的项目引用都不需要额外的依赖。 并且在运行时不需要编译,也就完全不存在编译导致的性能问题了。
缺点嘛,就是太麻烦。如果你是要做一个不太大的项目,光搞cakefile或者配置grunt就要费半天时间,不太值得。
通过以上内容总结,其实在使用coffeescript编写node.js项目可以非常简单,接下来希望大家抓紧把coffee用起来。同时也希望以上内容对大家有所帮助。
本文向大家介绍coffeescript使用的方式汇总,包括了coffeescript使用的方式汇总的使用技巧和注意事项,需要的朋友参考一下 Coffeescript作为Javascript低调的小弟实在是有过人之处,使用它可以增进开发效率,减少代码错误, 关键是能大幅提升开发愉悦感。我越来越觉得只要可能就在自己的项目中把coffee用起来。 然而也许你和我一样,在了解完coffeescript的语
我是Gradle/AspectJ的新手,对此我有几个问题。我开发了一些库,将在其他项目中使用。我使用AspectJ实现了一些交叉逻辑,并且使用@Aspect创建了我的方面,而没有使用apectj特定的语言。这个lib是一个小框架,它提供了一些注释来使用它。我为我的类创建了单元测试。我知道要应用方面,我需要使用AspectJ编译器(“AJC”)编译类。在我的ide中,我使用option:-javaa
本文向大家介绍js编写的treeview使用方法,包括了js编写的treeview使用方法的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了treeview使用方法,供大家参考,具体内容如下 1.所需文件:ftiens4.js,ua.js,XMLTree.js,以及一些树上的图片(文件下载处:http://www.treeview.net/),图片名字和位置如下图 2.其他页面
问题内容: 我正在使用可写流使用node.js编写一个大文件: 我想知道这种方案在不使用事件的情况下是否安全?如果不是(我认为是这种情况),那么将任意大数据写入文件的模式是什么? 问题答案: 这就是我最终做到的方式。背后的想法是创建实现ReadStream接口的可读流,然后使用方法将数据通过管道传输到可写流。 可以从猫鼬QueryStream中获取类的示例。
不过,我真正想要的是不要用一打子项目。sbt文件污染我的根。是否有一种方法可以将子项目build.sbt文件抛到它们各自的子目录中,在它们之间共享一些公共代码,然后为聚合子项目的整个项目创建一个根build.sbt?我现在在。Scala文件中有类似的设置,但如果可能的话,我更喜欢使用。sbt文件。 如果这是不可能的,那么用。sbt文件构建大型多项目构建的“正确”方法是什么?
本文向大家介绍Node.js文件操作方法汇总,包括了Node.js文件操作方法汇总的使用技巧和注意事项,需要的朋友参考一下 Node.js和其他语言一样,也有文件操作。先不说node.js中的文件操作,其他语言的文件操作一般也都是有打开、关闭、读、写、文件信息、新建删除目录、删除文件、检测文件路径等。在node.js中也是一样,也都是这些功能,可能就是api与其他语言不太一样。 一、同步、异步打开