Rake Pipeline 是 Rails Asset 管道的替代品吗?如果是,为什么以及这两种解决方案的历史和优点/缺点是什么?如果不是,它们有什么关系?
rake-pipeline
不是链轮的直接替代品。rake-pipeline
无限灵活和强大。资产管道实际上只是一个带有串联的预处理器。它不会使诸如源映射和模块包装之类的事情变得容易。Sprockets 做“依赖管理”。我引用依赖管理是因为在 javascript 文件中编写一些东西=require
是一种“管理依赖”的可怕方式。
Rake 管道定义了构建资产所需的步骤。这是管道。这是您可能会想到的构建过程:
- 将coffeescript编译成javascript
- 将所有 javascript 文件包装在 minispade 模块中
- 连接所有文件
- 缩小连接的文件。
您可以构建非常复杂的构建管道。请参阅 Iridium 的Assetfile,了解可能是世界上最复杂的 rake 管道示例。Rake-pipeline 不仅仅用于为 Web 应用程序构建资产。它可用于构建任何类型的代码库。Ember.js 使用它为 Ember.js 和 Ember-Data 构建发布文件。你可以用链轮来做到这一点,但这会浪费大量时间并且非常尴尬。
Sprockets 似乎针对开发进行了优化,其中 rake-pipeline 针对复杂的应用程序进行了优化。个别资产正在开发中。这使得开发速度更快,因为不必连接资产(仅在需要时进行预处理)。这对于 rake-pipeline 是不可能的。Rake-pipeline 只关心输入和输出。中间构建文件不可访问。
如果你愿意,你可以在 rails 内使用 rake-pipeline。rake-pipeline gem 捆绑了一个 rails 引擎来用它自己替换资产管道。如果你正在构建一个复杂的前端应用程序,我可能会推荐这个。如果您只想将 JS 文件包装在模块中,那么您可以查看资产管道的各种项目。
使用 Rake 管道,您可以添加出色的 rake-pipeline-web-filters 来获得所有连接、缩小、预处理,如 scss、minispade 等。使用 Asset Pipeline,似乎很难配置。一个直接的限制是我所有的 JS 都会立即进行评估,并且我不支持资产管道中的 minispade。替代方案是 minispade-rails gem。
见上一段。
一般来说,我试图了解如何在 Rails Asset 管道中使用 rake 管道 Assetfile 获得类似的构建过程。
这对于链轮是不可能的。Sprockets 功能实际上是 rake-pipeline 的一个子集。Rake 管道可以做 sprockets 可以做的所有事情,而且做得更好。缺点是它需要更多的配置。
我建议您查看我链接的资产文件。它可以让您了解您可以使用 rake-pipeline 做什么。这是我用 rake-pipeline 完成的一些事情。
- 在我的最终构建中包含特定于环境的 JS/CCS(如生产、开发、测试)等
- 允许其他代码使用钩子绑定到我的构建过程中
- 为我的 Ember 应用程序创建初始化文件
- 预编译车把模板
- 去掉生产代码中不需要的断言。
- 从我的输入生成 HTML5 缓存清单
您可以使用资产管道完成所有这些工作,但这不值得。