Rake Pipeline or Rails Asset Pipeline

3

试图了解一些关于Rails的事情:

我曾经在我的前端项目中成功地使用rake-pipelinerake-pipeline-web-filters。最近,在Rails后端上,我的前端资产是通过Rails Asset pipeline生成的。我认为它们都很相似,但是我无法将其与rake pipeline的Assetfile方式对齐。

所以,问题如下:

  1. Rake Pipeline是Rails Asset pipeline的替代品吗?如果是,这两种解决方案的历史、优缺点是什么?如果不是,它们之间有什么关系?

  2. 使用Rake pipeline,您可以添加优秀的rake-pipeline-web-filters来实现所有的合并、压缩、预处理(如scss、minispade等)。而使用Asset Pipeline则似乎很难配置。一个直接的限制就是所有的JS都会被立即eval,并且我没有在Assset Pipeline中支持minispade。对此的替代方案是minispade-rails宝石。

总的来说,我想了解如何使用rake pipeline Assetfile在Rails Asset pipeline中获得类似的构建过程。

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

1个回答

10
“Rake Pipeline”不是“Rails Asset Pipeline”的直接替代品。“Rake Pipeline”更加灵活和强大。 “Asset Pipeline”只是一个预处理器,用于文件合并。它不能轻松地实现诸如源映射和模块包装之类的功能。Sprockets执行“依赖项管理”。我使用“依赖项管理”这个术语,因为在JavaScript文件中编写“=require”等内容是一种糟糕的“依赖项管理”方式。
“Rake Pipeline”定义了构建资产所需的步骤。这就是“Pipeline”。以下是您可以考虑的构建过程:
1. 将CoffeeScript编译为JavaScript 2. 将所有JavaScript文件包装在minispade模块中 3. 合并所有文件 4. 压缩合并后的文件。
你可以构建非常复杂的构建流程。看看Iridium的Assetfile,可能是世界上最复杂的rake pipeline示例。 rake-pipeline不仅用于构建Web应用程序的资源,还可用于构建任何类型的代码库。Ember.js使用它来构建Ember.js和Ember-Data的发布文件。您可以使用sprockets完成此操作,但这将是一大浪费时间并且非常笨拙。
Sprockets似乎针对开发进行了优化,而rake-pipeline则针对复杂应用进行了优化。在开发中,各个资源都是可用的。这使得开发更快,因为资产不必连接(仅在需要时预处理)。这对rake-pipeline来说是不可能的。 rake-pipeline只关心输入和输出。中间生成的构建文件是无法访问的。
如果喜欢,您可以在rails内部使用rake-pipeline。 rake-pipeline gem捆绑了一个Rails引擎来替换其自身的资源管道。如果您正在构建复杂的前端应用程序,则可以考虑使用它。如果您只想将JS文件包装成模块,则可以查看资源管道的各种项目。
使用Rake Pipeline,您可以添加优秀的rake-pipeline-web-filters,以获得所有的串联、最小化和预处理(如scss、minispade等)。使用Asset Pipeline似乎很难配置。一个直接的限制是,我的所有JS都会立即eval,并且我没有对Assset Pipeline中的minispade提供支持。解决方案是使用minispade-rails gem。

请参见上一段。

总的来说,我试图理解如何使用Rails Asset pipeline中的Rake Pipeline Assetfile获得类似的构建过程。

这在sprockets中是不可能的。Sprockets的功能实际上是rake-pipeline的子集。Rake Pipeline可以做到sprockets所能做的一切,而且做得更好。缺点是需要更多的配置。

我建议您查看我链接的assetfile。它可以让您了解您可以使用rake-pipeline做什么。以下是我使用rake-pipeline做的一些事情。

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

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


讲解得非常清晰明了。感谢您抽出时间详细回答。 - Rajat
@ahawkins 你好,您似乎对rake pipeline有很深的了解!我们正在使用它并非常喜欢,但是相同文件的rakep server比Rails Asset Pipeline慢得多(几乎是数量级)。如何加速?我的猜测是它不会缓存东西,并且每次都重新编译。 - sandstrom
很遗憾,rake-pipeline 似乎已经彻底死亡了... 我尝试使用它,但它不支持 rake 10,并且已经超过一年没有更新了。 - brauliobo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接