2011-10-27 111 views
25

问题有一个Rails 3.1的应用程序

如果你已经使用RequireJS有一个Rails 3(ESP 3.1)应用程序中使用RequireJS,怎么是为你工作?我需要注意的任何配置技巧或其他陷阱?

背景

我使用RequireJS在链轮,基于资产管道考虑用Rails 3.1,专为JavaScript代码。我有两个激励因素:

  • 我想为我的JS客户端代码利用RequireJS的模块管理。
  • 我想要一个预编译系统,可以按照我的JS库代码进入其他上下文。令我惊讶的是,Asset Pipeline预编译器是Rails的一部分,而不是Sprockets本身的一部分。

所有的反馈赞赏,谢谢!

+1

你能告诉更多有关你为什么会想RequireJS一个”过度链轮模块管理:当前的版本通过可用?我正在考虑为我们的Rails应用程序做同样的事情 - 用RequireJS替换Sprockets。 – kangax

+4

@ kangax,链轮并不真正提供模块管理。它只是通过Sprockets的指令将一堆JavaScript集成到一个构建文件中。碰巧,我发布了[requirejs-rails](https://github.com/jwhitley/requirejs-rails/)gem,将RequireJS整合到Rails中,利用Sprockets for CoffeeScript转换。接近0.5.0版本,提供预先支持。 –

回答

48

对于后人,这里的地方我来对这个问题:

  • RequireJS提供Asynchronous Module Definition API的实现。 RequireJS'Why AMD? page列出了你为什么要使用它的情况。

  • 链轮和Rails 3资产管道允许简单的JavaScript/CoffeeScript代码结构,但不提供任何真正的模块支持。例如,Sprockets中没有任何名称空间控制。

  • jQuery(截至1.7),Underscore,Dojo和许多其他主要图书馆都实施了AMD支持。几个其他主要的JS库似乎在近期水平上有AMD支持(例如Backbone.js)。

当然可以创建一个集成了RequireJS的Rails应用程序。为了简化这一过程,我创建了requirejs-rails gem on github,通过r.js为基于AMD的代码提供了直接配置和资产流水线感知预编译。

gem install requirejs-rails

+1

也为后人,Underscore不再支持AMD。但是,Lodash是Underscore的替代产品,它的确如此。 http://lodash.com – leppert

+2

感谢这宝石。有代码Rails应用程序,我可以看到它显示了它是如何设置的,最好是使用Backbone。我已经阅读过文档,但是我对require.js不熟悉,并且没有经验丰富/熟练使用javascript,所以我通过一个工作示例相处得更好。 – Leahcim

+0

下面是一个集成了requirejs-rails的示例Rails 4应用程序:https:// github。com/pboling/require-rails-example – rubiii

相关问题