Rake Pipeline或Rails Asset Pipeline

Raj*_*jat 3 build-process ruby-on-rails 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.

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

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

aha*_*ins 10

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

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

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

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

您可以构建非常复杂的构建管道.有关世界上最复杂的rake管道示例,请参阅Iridium的Assetfile.Rake-pipeline不仅适用于构建Web应用程序的资产.它可以用于构建任何类型的代码库.Ember.js使用它来构建Ember.js和Ember-Data的发布文件.你可以用链轮做到这一点,但这将是一个巨大的浪费时间和非常尴尬.

链轮似乎针对开发进行了优化,其中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管道做什么.以下是我用rake-pipeline完成的一些事情.

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

您可以使用资产管道完成所有这些工作,但这不值得付出努力.