【问题标题】:Rails 3.2 Asset Pipeline and RequireJSRails 3.2 资产管道和 RequireJS
【发布时间】:2013-01-31 17:28:06
【问题描述】:

我将使用 Ruby on Rails 3.2 启动一个富客户端 Web 应用程序。我打算使用 RequireJS,但它似乎与 Asset Pipeline 发生冲突。据我所知,后者基本上做的是连接依赖资产,缩小和压缩它们(如果我错了,请纠正我),这似乎与异步加载 JavaScript 文件不太兼容。

乍一看,资产管道似乎有更好的性能。但是,RequireJS 允许您将 JavaScript 代码组织在易于重用和管理其依赖项的模块中。

有什么方法可以将两者结合起来吗?如果没有,你会选择哪一个?

【问题讨论】:

  • RequireJS 的用途是什么 - 在浏览器中包含 js 模块或服务器端?
  • 在浏览器中使用
  • 它可以很好地完成工作。

标签: ruby-on-rails requirejs asset-pipeline amd


【解决方案1】:

您可能想看看这个宝石https://github.com/jwhitley/requirejs-rails/

似乎正在做你想做的事——即使用 requirejs 加载客户端,同时仍然利用一些资产管道。

我很想建议我猜在大多数情况下,资产管道会更快,因为它会加载单个缩小的 js 资源。虽然依赖管理不是很好,所以它在很大程度上取决于应用程序。

【讨论】:

  • 完全取决于构建过程/应用程序。您可以使用 r.js 将压缩成单个文件以用于生产,或利用 AMD 并创建按需加载的包,或稍后使用的延迟加载包。
【解决方案2】:

我建议下载 RequireJS 库并把它扔给vendor/assets/javascripts。然后在您的application.js 文件中:

//= require require

(funny , yes?) ,这就足够了。

这是结合资产管道和模块化 js 库的最简单方法。我不知道此特定库需要任何其他设置,但您可以查看this Railscast,它描述了类似的内容。

【讨论】:

  • 没关系,它会工作,但是,为什么不禁用管道呢?
  • 我认为如果某些东西运行良好,它应该保持原样。没有管道会是什么:来回未压缩的js...
  • 但我的意思是,异步加载的脚本不会被压缩,对吗?它们不会包含在清单中
  • 在您的情况下,它们是在浏览器端加载的。它不影响资产管道(在服务器端压缩 js)。添加RequireJS(依赖管道)为浏览器提供功能,而不是为服务器提供功能。总结:RequireJS添加的模块没有被压缩。
  • Asset Pipeline 和 RequireJS 似乎有冲突和/或冗余的功能。我看到的一个大问题是如何从 CDN 提供资产,其中文件被指纹识别并被赋予遥远的未来标题。在服务器端保持缩小、混淆和指纹识别是有意义的。必须制作 js/css 清单来创建 RequireJS 可以使用的捆绑资产服务器端。
猜你喜欢
  • 2012-05-08
  • 1970-01-01
  • 1970-01-01
  • 2012-03-15
  • 2023-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多