【问题标题】:Using RequireJS with a Rails 3.1 app将 RequireJS 与 Rails 3.1 应用程序一起使用
【发布时间】:2011-12-16 19:29:37
【问题描述】:

问题

如果您将 RequireJS 与 Rails 3 (esp 3.1) 应用程序一起使用,那对您有什么作用?我需要注意哪些配置技巧或其他问题?

背景

我正在考虑在 Rails 3.1 中使用 RequireJS 而不是基于 Sprockets 的资产管道,特别是用于 JavaScript 代码。我做出这个选择的动机有两个:

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

感谢所有反馈,谢谢!

【问题讨论】:

  • 您能否详细说明为什么您希望 RequireJS 的模块管理而不是 Sprockets 的模块管理?我正在考虑为我们的 Rails 应用程序做同样的事情——用 RequireJS 替换 Sprockets。
  • @kangax,Sprockets 并没有真正提供模块管理。它只是通过 Sprockets 的指令将一堆 JavaScript 合并到一个构建文件中。碰巧的是,我发布了requirejs-rails gem 以将 RequireJS 集成到 Rails 中,利用 Sprockets 进行 CoffeeScript 转换。即将发布具有预编译支持的 0.5.0。

标签: ruby-on-rails-3.1 sprockets requirejs


【解决方案1】:

为了后人,这是我在这个问题上遇到的问题:

  • RequireJS 提供了Asynchronous Module Definition API 的实现。 RequireJS 的Why AMD? page 说明了您为什么要使用它。

  • Sprockets 和 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

【讨论】:

  • 为了后代,Underscore 不再支持 AMD。然而,下划线的替代品 Lodash 确实如此。 lodash.com
  • 感谢这个宝石。是否有代码 Rails 应用程序我可以看到它显示了它是如何设置的,最好是使用 Backbone。我已经阅读了文档,但我是 require.js 的新手,而且对 javascript 的经验/熟练程度不高,所以我通过一个工作示例相处得更好。
  • 这是一个集成了 requirejs-rails 的 Rails 4 应用示例:github.com/pboling/require-rails-example
  • @leppert 您始终可以使用 shim 配置并导出“_”。
猜你喜欢
  • 2011-12-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-20
  • 1970-01-01
  • 2014-10-06
  • 2023-04-09
  • 2015-04-27
相关资源
最近更新 更多