Rake Pipeline或Rails Asset Pipeline

时间:2013-06-03 22:54:22

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

试图理解有关rails的一些事情:

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

最近,使用rails后端,我的前端资产正在使用Rails Asset管道生成。我认为它们都很相似但是我没有在脑海中对齐它如何映射到资源文件在rake管道中做事的方式。

所以,问题:

  1. Rake Pipeline是Rails Asset管道的替代品吗?如果是的话,为什么以及历史和历史是什么?这两种解决方案的优缺点是什么?如果没有,它们是如何相关的?

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

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

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

1 个答案:

答案 0 :(得分:10)

  

Rake Pipeline是Rails Asset管道的替代品吗?如果是的话,为什么以及历史和历史是什么?这两种解决方案的优缺点是什么?如果没有,它们是如何相关的?

rake-pipeline不是链接的直接替代品。 rake-pipeline无限灵活,功能更强大。资产管道实际上只是一个连接的预处理器。它不会像源地图和模块包装那样简单。链轮做“依赖管理”。我引用了依赖关系管理,因为在javascript文件中写一些=require是一种“管理依赖关系”的可怕方式。

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

  1. 将coffeescript编译为javascript
  2. 在minispade模块中包装所有javascript文件
  3. 连接所有文件
  4. 缩小连接文件。
  5. 您可以构建非常复杂的构建管道。有关世界上最复杂的rake管道示例,请参阅Iridium的Assetfile。 Rake-pipeline不仅适用于构建Web应用程序的资产。它可以用于构建任何类型的代码库。 Ember.js使用它来构建Ember.js和Ember-Data的发布文件。你可以用链轮做到这一点,但这会浪费很多时间并且非常尴尬。

    Sprockets似乎针对开发进行了优化,其中rake-pipeline针对复杂应用进行了优化。个别资产可供开发。这使得开发更快,因为资产不必连接(只有在需要时才进行预处理)。 rake-pipeline无法做到这一点。耙管只关心输入和输出。中间构建文件不可访问。

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

      

    使用Rake管道,您可以添加优秀的rake-pipeline-web-filters来获得所有连接,缩小,预处理,如scss,minispade等。使用Asset Pipeline,似乎很难配置。一个直接的限制是我的所有JS都立即被评估,我在Assset Pipeline中不支持minispade。替代方案是minispade-rails gem。

    见上一段。

      

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

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

    我建议你看看我链接的资产文件。它可以让你知道你可以用rake-pipeline做什么。以下是我用rake-pipeline完成的一些事情。

    • 在我的最终版本中包含特定于环境的JS / CCS(如生产,开发,测试)等
    • 允许其他代码与hooks
    • 绑定到我的构建过程中
    • 为我的Ember应用程序创建初始化程序文件
    • 预编译把手模板
    • 删除生产代码中不需要的断言。
    • 从我的输入
    • 生成HTML5缓存清单

    您可以使用资产管道执行所有这些操作,但这不值得付出努力。