动态编译CoffeeScript CommonJS模块



有一个模块:

# 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之类的构建工具来完成。

最新更新