有一个模块:
# a.coffee:
@f = -> console.info 'Hell, oh, world!' # Note that exports == this
和我需要它的另一个模块:
# b.coffee:
a = require './a'
a.f()
我想在b.coffee
中运行代码,而不需要显式地生成a.js
。
在NodeJS中,我所需要做的就是在其他任何事情之前require('coffee-script')
一次。
对于浏览器是否有相同的技巧?
在我告诉您如何做之前,我想明确一点,任何人都不应该在任何类似于生产环境的环境中这样做,因为这会迫使每个浏览器在每次页面加载时编译它。考虑到这一点:
查看http://jashkenas.github.io/coffee-script/#scripts。如果你把CoffeeScript编译器在你的页面通过一个脚本标签,那么你可以包括CoffeeScript文件(甚至内联源)与<script type="text/coffeescript">
标签。脚本将按照它们在html中出现的顺序编译并运行。
浏览器不支持coffeescript。如果你只是想对coffee文件进行修改并引用它,而不必每次都手动运行命令,你可以使用coffee编译器来监视文件,并在对其进行修改时更新js文件。
coffee --watch --compile experimental.coffee
当在浏览器中工作时,必须有一个步骤来创建和引用js文件。
从注释中更新
既然你想要一个库来支持commonjs模块,你可能想看看browserify。它支持使用它的转换函数https://github.com/substack/node-browserify#btransformtr。
这可能永远不会像你想的那样好。为了让浏览器读取coffeescript,编译过程必须发生。出于性能原因,如果在服务器上执行此操作,而不是在每次都使用users time 的客户端上执行,效果会好得多!
编译可以很简单。由于您只想在服务器上拥有静态文件,因此编写一个脚本来获取所有咖啡文件,将它们捆绑到压缩的js文件中,然后可以在html中引用该文件,这很简单。这可以用coffee编译器或grunt之类的构建工具来完成。