0

我有一个模块:

# 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')一次。

浏览器是否有等效的技巧?

4

2 回答 2

3

在我告诉你如何做之前,我想明确一点,任何人都不应该在任何类似于生产环境的东西中这样做,因为这会迫使每个浏览器在每次页面加载时编译它。考虑到这一点:

查看http://jashkenas.github.io/coffee-script/#scripts。如果您通过脚本标签将 CoffeeScript 编译器放入您的页面,那么您可以在标签中包含 CoffeeScript 文件(甚至内联源代码)<script type="text/coffeescript">。脚本将按照它们在 html 中出现的顺序进行编译和运行。

于 2013-05-31T15:07:06.670 回答
1

浏览器本身并不支持咖啡脚本。如果您只是希望能够对咖啡文件进行更改并引用它,而不必每次都手动运行命令,则可以使用咖啡编译器来监视文件并在更改时更新 js 文件。

coffee --watch --compile experimental.coffee

不过,在浏览器中工作时,必须有一个步骤来创建和引用 js 文件。

从评论更新

由于您希望库无论如何都支持 commonjs 模块,因此您可能需要查看 browserify。它支持您想要使用其转换功能执行的操作:https ://github.com/substack/node-browserify#btransformtr 。

不过,这可能永远不会像您想要的那样好。浏览器必须进行编译过程才能读取coffeescript。出于性能原因,如果这种情况发生在服务器上,而不是在您每次都使用用户时间的客户端上,它会好得多!

编译可以很简单。由于您只想在服务器上拥有静态文件,因此编写一个脚本来获取您所有的咖啡文件,将它们捆绑到一个压缩的 js 文件中,然后您可以在您的 html 中引用该文件是微不足道的。这可以通过咖啡编译器或像 grunt 这样的构建工具来完成。

于 2013-05-31T14:10:41.120 回答