“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缓存清单
您可以使用资产管道完成所有这些工作,但这并不值得努力。
rakep server
比Rails Asset Pipeline慢得多(几乎是数量级)。如何加速?我的猜测是它不会缓存东西,并且每次都重新编译。 - sandstromrake-pipeline
似乎已经彻底死亡了... 我尝试使用它,但它不支持 rake 10,并且已经超过一年没有更新了。 - brauliobo