ruby-on-rails - Rake 管道或 Rails Assets 管道

标签 ruby-on-rails build-process asset-pipeline rake-pipeline

尝试了解有关 Rails 的一些事情:

我用过rake-pipelinerake-pipeline-web-filters过去我的前端项目成功。

最近,有了 Rails 后端,我的前端 Assets 正在使用 Rails Assets 管道生成。我认为它们都很相似,但我无法在脑海中将它与 rake 管道中的 Assetfile 做事方式的映射方式对齐。

所以,问题:

  1. Rake 管道是 Rails Assets 管道的替代品吗?如果是,为什么以及这两种解决方案的历史和优点/缺点是什么?如果不是,它们有什么关系?

  2. 使用 Rake 管道,您可以添加出色的 rake-pipeline-web-filters获得所有的连接、缩小、预处理,如 scss、minispade 等。使用 Asset Pipeline,似乎很难配置。一个直接的限制是我所有的 JS 都会立即进行评估,并且我不支持 Assets 管道中的 minispade。替代方法是 minispade-rails gem 。

一般来说,我试图了解如何在 Rails Assets 管道中使用 rake 管道 Assetfile 获得类似的构建过程。

有人可以澄清这两个构建过程以及一般如何考虑它们吗?

最佳答案

Is Rake Pipeline an alternative to Rails Asset pipeline? If yes, why and what is the history & pros/cons of these two solutions? If not, how are they related?

rake-pipeline 不是 sprockets 的直接替代品。 rake-pipeline 更加灵活和强大。 Assets 管道实际上只是一个带有串联的预处理器。它不会使诸如源映射和模块包装之类的事情变得容易。 Sprockets 做“依赖管理”。我引用依赖管理是因为在 javascript 文件中写一些东西 =require 是一种“管理依赖”的可怕方式。

Rake 管道定义了构建 Assets 所需的步骤。这是管道。这是您可能会想到的构建过程:

  1. 将coffeescript编译成javascript
  2. 将所有 javascript 文件包装在 minispade 模块中
  3. 连接所有文件
  4. 缩小级联文件。

您可以构建非常复杂的构建管道。参见 Iridium 的 Assetfile可能是世界上最复杂的 rake 管道示例。 Rake-pipeline 不仅仅用于为 Web 应用程序构建 Assets 。它可用于构建任何类型的代码库。 Ember.js 使用它为 Ember.js 和 Ember-Data 构建发布文件。你可以用链轮来做到这一点,但这会浪费大量时间并且非常尴尬。

Sprockets 似乎针对开发进行了优化,其中 rake-pipeline 针对复杂的应用程序进行了优化。个别 Assets 正在开发中。这使得开发速度更快,因为不必连接 Assets (仅在需要时进行预处理)。这对于 rake-pipeline 是不可能的。 Rake-pipeline 只关心输入和输出。中间构建文件不可访问。

如果你愿意,你可以在 Rails 中使用 rake-pipeline。 rake-pipeline gem 捆绑了一个 rails 引擎来用它自己替换 Assets 管道。如果你正在构建一个复杂的前端应用程序,我可能会推荐这个。如果您只想将 JS 文件包装在模块中,那么您可以查看 Assets 管道的各种项目。

With Rake pipeline, you addon the excellent rake-pipeline-web-filters to get all the concatenation, minification, pre-processing like scss, minispade etc. With Asset Pipeline, it seems hard to configure. One immediate limitation is that all my JS is eval'd immediately and I dont have support for minispade in the Assset Pipeline. The alternative to that is the minispade-rails gem.

参见上一段。

In general, I am trying to understand how to go about getting a similar build process with rake pipeline Assetfile in Rails Asset pipeline.

这对于链轮是不可能的。 Sprockets 功能实际上是 rake-pipeline 的一个子集。 Rake 管道可以做 sprockets 可以做的所有事情,而且做得更好。缺点是需要更多配置。

我建议您查看我链接的 Assets 文件。它可以让您了解您可以使用 rake-pipeline 做什么。这是我用 rake-pipeline 完成的一些事情。

  • 在我的最终构建中包含特定于环境的 JS/CCS(如生产、开发、测试)等
  • 允许其他代码使用钩子(Hook)连接到我的构建过程中
  • 为我的 Ember 应用程序创建初始化文件
  • 预编译 Handlebars 模板
  • 去除生产代码中不需要的断言。
  • 根据我的输入生成 HTML5 缓存 list

您可以使用 Assets 管道完成所有这些工作,但不值得这样做。

关于ruby-on-rails - Rake 管道或 Rails Assets 管道,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16907153/

相关文章:

build-process - 来自 Linux 内核的奇怪构建消息

grails - Grails Assets 管道-将MinifyJs设置为true不起作用

ruby-on-rails - 如何连接两个事件记录结果以返回可以进一步过滤的新结果?

ruby-on-rails - HTTP POST,头 :ok returning 1 mystery byte

visual-studio - 在没有 MSBuild 或插件的情况下在 Visual Studio 中按顺序构建配置?

ruby-on-rails - rails : embed a flash swf

ruby-on-rails - ActionView::Template::Error(未预编译):

ruby-on-rails - client_side_validations 不适用于 simple_nested_form

ruby-on-rails - R规范 : How to write conditional validation when it also works with validate