【发布时间】:2015-10-13 22:00:33
【问题描述】:
我们的应用程序是 3 个引擎的集合,这些引擎构成了我们的基础 gem。专门为我们的基础 gem 编写的其他插件 gem,可用于向基础添加功能。
目前我们有 2 个自定义 sprockets 指令和 1 个自定义 Sass 导入器,它们试图将 SCSS 文件从这些插件动态拉入基本清单。一个人为的例子看起来像:
//= depend_on_gemfile # mimics default "depend_on" functionality
//= depend_on_stylesheets # mimics default "depend_on" functionality
...
@import 'engine/namespace/settings/global';
@import 'engine/namespace/settings/colors';
@import 'engine/namespace/settings/fonts';
@import '[engine-plugins]/namespace/settings'; # mimics Sass Filesystem importer
...
要清楚,这是可行的。我们在 Sass 缓存文件的方式上遇到了问题,这有点太复杂了,目前不是我的真正目标。
关键是我们意识到删除自定义 Sprockets 指令和 Sass 导入器,转而使用 Rails 助手,也可以解决我们的问题,因为 ERB 将在 SCSS 之前编译,我们能够找到并将所有包含的插件中所需的所有路径格式化为字符串并将其转储到清单中。比如:
@import 'engine/namespace/settings/global';
@import 'engine/namespace/settings/colors';
@import 'engine/namespace/settings/fonts';
<%= load_plugin_stylesheets_for('settings'); %>
...
这似乎是一个更简单的解决方案,因为我们所做的只是找到每个路径并将这些路径转换为字符串。
问题似乎是 Rails 助手完全不在 Sprockets 的领域。
我找到了一些资源,但它们似乎都与 Rails 3 相关。
我很好奇是否有人在使用 Rails 4 时遇到过这个问题,他们是否解决了这个问题以及如何解决。或者,如果我只是认为这一切都是错误的,并且有一种更好的方法可以解决问题,而不会像我们以前那样过于复杂。
TL;DR
我想在 Sprockets 清单文件中使用常规的 Rails 助手。 Rails 版本是 4.2.4。我们正在运行引擎。这可能吗?
编辑:
This comment 回答了我的问题。
在 engine.rb 文件中的初始化程序中实施此解决方案后,所有 Rails ActionView 助手都可用,包括我的自定义编写助手。
【问题讨论】:
标签: ruby-on-rails ruby ruby-on-rails-4 sprockets ruby-on-rails-4.2