1

我正在尝试构建一个为其主机应用程序提供资产的 Rails 引擎。具体来说,我希望能够做到以下几点

# Host App's Gemfile
gem 'my-rockin-engine'

和 ...

# Host App's application.css
/*
 *= require styles
 */

@import 'my-rockin-engine/mixins'

和 ...

# Host App's style.sass
.host-app-defined-class-name
  +my-rockin-engines-mixin

混合“my-rockin-engines-mixin”在 MyRockinEngine 资产中的某个位置定义。

问题

通过引擎,我有来自主机应用程序的@imports 链。(由于此处描述的原因,我正在使用@imports 。)我在引擎资产中创建的任何样式定义都可用于主机应用程序。但是,我创建的任何 SASS 混合都不能在任何地方使用,除非在定义混合的同一文件中。

本质上,我想知道我的实现是否不起作用,因为(1)我以一种混乱的方式使用引擎;(2) 不能在 Rails 引擎和它们的宿主应用程序之间共享 mixin;(3) 我误解了 sprockets/rails/compass/sass (@import/require) 指令的某些方面。

任何帮助将不胜感激!如果有人需要,我总是可以提供更多详细信息。

4

1 回答 1

2

对于后代来说,我遇到的问题似乎在 (3) 的范围内——在我的问题中有所描述。

不要尝试@import使用名为foobar.css.sass. Compass 会将此类文件视为 css,因为它们必须通过@import 'foobar.css'. @import foobar将失败,因为它.css是文件名的一部分。

所以,我的问题通过确保我@import使用.sass扩展名的任何文件得到解决,并且.css文件名的最后部分没有。

于 2013-09-10T23:13:45.537 回答