12

如果最终需要将生成的 javascript 文件连接在一起以供客户端使用,那么在 CoffeeScript 文件中进行依赖管理的最佳方法是什么?

对于服务器端 CoffeeScript,我可以只使用 'require' 关键字来要求其他 javascript 片段。当为客户端应用程序编译它以具有依赖关系树时,根据需要,计算并生成连接的独立 javascript 文件。反正有没有以通用的方式做到这一点?

4

5 回答 5

3

另一种选择是使用 CoffeeToaster,它使用了不同于实现 AMD / CJS 模块模式的另一种方法。

看看:http: //github.com/serpentem/coffee-toaster

于 2012-04-19T16:33:46.693 回答
2

Villain(浏览器的 CoffeeScript 游戏引擎)定义了执行此操作的函数(依赖管理和 js 连接)。

代码在这两个文件中:

  • cake.coffee,见 , determineDependencies(), wrapModule(), 和bundleSources()
  • brequire.coffee,浏览器的需要替代品,与wrapModule()

在这里使用它(参见'bundle'Cake 任务)。

注意:我只是声明了'main'模块的构建目录,Villain 扫描我编译的 JS 文件以构建依赖关系树(以 开头index.js),然后创建一个 JavaScript 包文件,其中包含 Villain 的require替换以及我所有相关代码的排序和正确包装。

Villain 的作者在使用Villain 制作的 CoffeeScript 游戏orona中使用了它。

于 2010-12-08T13:21:54.517 回答
2

通常,对于 JavaScript(和 CSS)的客户端打包,您需要某种资产打包插件。我们使用Jammit,但还有许多其他选项:SprocketsDjango-Compress ……等等。

于 2010-11-10T21:55:25.657 回答
1

对于客户端的依赖管理,我将requirejs用于 javascript 和 coffeescript 源。可以使用 requirejs 插件来加载原生的咖啡文件,但我更喜欢“编译”成 js。

requirejs还提供/使用r.js 优化器。它可用于将一组 js 文件聚合为一个并缩小它。您不必指定要聚合的文件,它是“main.js”所需的每个模块的依赖项定义。(符合您要求的功能)

我非常喜欢 requirejs 的东西,它“促进”创建模块并声明显式依赖项。

# A.coffee
define(() ->
  class A
    constructor: (@c1, @c2) ->
      @c2 ?= 1

    m1 : () ->
      "hello"

    toString : () -> "#{@c1}#{@c2}"
)


# B.coffee
define(['A'], (A) ->
  a = new A(33)
  console.log(a, a.m1())
)
于 2011-12-02T22:30:48.690 回答
1

我已经使用(并且我想仍在使用)requirejs,但我开始发现它相当笨拙。我的很多文件最终在顶部有 ~10-12 个导入,它们占用了大量空间并且看起来不太好。

对于一个新项目,我尝试了 browserify。这很棒!如果你使用 grunt(你应该),你可以做一个监视任务来浏览你的代码更改。 grunt-browserify还提供了进行咖啡脚本转换的能力。

https://github.com/jmreidy/grunt-browserify

所以你的监视任务Gruntfile.coffee看起来像:

watch:
  files: [
    "app/**/*.coffee"
  ]
  tasks: "browserify"

browserify:
  'build/app.js': ['app/**/*.coffee']
  options:
    transform: ['coffeeify']
于 2013-07-03T17:41:32.457 回答