【问题标题】:Using a Rails Engine to share SASS Mixins across projects使用 Rails 引擎跨项目共享 SASS Mixin
【发布时间】:2013-09-13 19:17:16
【问题描述】:

我正在尝试构建一个 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

mixin“my-rockin-engines-mixin”在 MyRockinEngine 资产中的某处定义。

问题

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

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

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

【问题讨论】:

    标签: ruby-on-rails sass compass-sass sprockets rails-engines


    【解决方案1】:

    对于后人来说,我遇到的问题似乎在我的问题中描述的 (3) 领域。

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

    因此,我的问题通过确保我 @import 使用的所有文件都使用 .sass 扩展名,并且文件名的最后部分没有 .css 来解决。

    【讨论】:

    • scss 文件也是如此。一旦我将引擎文件从“stylesheets/engine/engine_css_file.css.scss”重命名为“stylesheets/engine/engine_css_file.scss”,它就允许我使用从引擎到应用程序的混合。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-15
    • 2015-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多