尝试了解有关 Rails 的一些事情:
我用过rake-pipeline与 rake-pipeline-web-filters过去我的前端项目成功。
最近,有了 Rails 后端,我的前端 Assets 正在使用 Rails Assets 管道生成。我认为它们都很相似,但我无法在脑海中将它与 rake 管道中的 Assetfile 做事方式的映射方式对齐。
所以,问题:
Rake 管道是 Rails Assets 管道的替代品吗?如果是,为什么以及这两种解决方案的历史和优点/缺点是什么?如果不是,它们有什么关系?
使用 Rake 管道,您可以添加出色的 rake-pipeline-web-filters获得所有的连接、缩小、预处理,如 scss、minispade 等。使用 Asset Pipeline,似乎很难配置。一个直接的限制是我所有的 JS 都会立即进行评估,并且我不支持 Assets 管道中的 minispade。替代方法是 minispade-rails gem 。
一般来说,我试图了解如何在 Rails Assets 管道中使用 rake 管道 Assetfile 获得类似的构建过程。
有人可以澄清这两个构建过程以及一般如何考虑它们吗?
最佳答案
Is Rake Pipeline an alternative to Rails Asset pipeline? If yes, why and what is the history & pros/cons of these two solutions? If not, how are they related?
rake-pipeline
不是 sprockets 的直接替代品。 rake-pipeline
更加灵活和强大。 Assets 管道实际上只是一个带有串联的预处理器。它不会使诸如源映射和模块包装之类的事情变得容易。 Sprockets 做“依赖管理”。我引用依赖管理是因为在 javascript 文件中写一些东西 =require
是一种“管理依赖”的可怕方式。
Rake 管道定义了构建 Assets 所需的步骤。这是管道。这是您可能会想到的构建过程:
- 将coffeescript编译成javascript
- 将所有 javascript 文件包装在 minispade 模块中
- 连接所有文件
- 缩小级联文件。
您可以构建非常复杂的构建管道。参见 Iridium 的 Assetfile可能是世界上最复杂的 rake 管道示例。 Rake-pipeline 不仅仅用于为 Web 应用程序构建 Assets 。它可用于构建任何类型的代码库。 Ember.js 使用它为 Ember.js 和 Ember-Data 构建发布文件。你可以用链轮来做到这一点,但这会浪费大量时间并且非常尴尬。
Sprockets 似乎针对开发进行了优化,其中 rake-pipeline 针对复杂的应用程序进行了优化。个别 Assets 正在开发中。这使得开发速度更快,因为不必连接 Assets (仅在需要时进行预处理)。这对于 rake-pipeline 是不可能的。 Rake-pipeline 只关心输入和输出。中间构建文件不可访问。
如果你愿意,你可以在 Rails 中使用 rake-pipeline。 rake-pipeline gem 捆绑了一个 rails 引擎来用它自己替换 Assets 管道。如果你正在构建一个复杂的前端应用程序,我可能会推荐这个。如果您只想将 JS 文件包装在模块中,那么您可以查看 Assets 管道的各种项目。
With Rake pipeline, you addon the excellent rake-pipeline-web-filters to get all the concatenation, minification, pre-processing like scss, minispade etc. With Asset Pipeline, it seems hard to configure. One immediate limitation is that all my JS is eval'd immediately and I dont have support for minispade in the Assset Pipeline. The alternative to that is the minispade-rails gem.
参见上一段。
In general, I am trying to understand how to go about getting a similar build process with rake pipeline Assetfile in Rails Asset pipeline.
这对于链轮是不可能的。 Sprockets 功能实际上是 rake-pipeline 的一个子集。 Rake 管道可以做 sprockets 可以做的所有事情,而且做得更好。缺点是需要更多配置。
我建议您查看我链接的 Assets 文件。它可以让您了解您可以使用 rake-pipeline 做什么。这是我用 rake-pipeline 完成的一些事情。
- 在我的最终构建中包含特定于环境的 JS/CCS(如生产、开发、测试)等
- 允许其他代码使用钩子(Hook)连接到我的构建过程中
- 为我的 Ember 应用程序创建初始化文件
- 预编译 Handlebars 模板
- 去除生产代码中不需要的断言。
- 根据我的输入生成 HTML5 缓存 list
您可以使用 Assets 管道完成所有这些工作,但不值得这样做。
关于ruby-on-rails - Rake 管道或 Rails Assets 管道,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16907153/