我有一个模块:
# 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')
一次。
浏览器是否有等效的技巧?
我有一个模块:
# 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 中出现的顺序进行编译和运行。
浏览器本身并不支持咖啡脚本。如果您只是希望能够对咖啡文件进行更改并引用它,而不必每次都手动运行命令,则可以使用咖啡编译器来监视文件并在更改时更新 js 文件。
coffee --watch --compile experimental.coffee
不过,在浏览器中工作时,必须有一个步骤来创建和引用 js 文件。
由于您希望库无论如何都支持 commonjs 模块,因此您可能需要查看 browserify。它支持您想要使用其转换功能执行的操作:https ://github.com/substack/node-browserify#btransformtr 。
不过,这可能永远不会像您想要的那样好。浏览器必须进行编译过程才能读取coffeescript。出于性能原因,如果这种情况发生在服务器上,而不是在您每次都使用用户时间的客户端上,它会好得多!
编译可以很简单。由于您只想在服务器上拥有静态文件,因此编写一个脚本来获取您所有的咖啡文件,将它们捆绑到一个压缩的 js 文件中,然后您可以在您的 html 中引用该文件是微不足道的。这可以通过咖啡编译器或像 grunt 这样的构建工具来完成。