4

要在多个目录中编译 .scss 文件,我们需要使用“add_import_path”(http://compass-style.org/help/tutorials/configuration-reference/),但我不明白如何。

我试图添加

additional_import_paths
add_import_path "_themes"
add_import_path = "_themes"
additional_import_paths = "_themes"

在我的 config.rb 中,但没有运气,Compass 仅从sass_dir = "_modules"编译


更新:是的,这条线

add_import_path "_themes"

没有给我们“找不到文件夹”错误,但 compass 仍然没有在其中编译 .scss

我究竟做错了什么?

4

2 回答 2

7

这里有一个公认的答案,但我不认为它回答了这个问题,而是提供了一个替代解决方案。这绝对没问题,我并不是要侮辱任何人,但这里没有的是关于add_import_path它对你有什么作用的信息。

如果有人曾经在 Magento 工作过,那么您就会熟悉它用于主题和模板文件的后备结构。为了设置使用相同默认皮肤的多个商店,我们需要包含一个备用结构,该结构允许在预定义的层次结构上进行更改。所以检查 dis config.rb 文件

myThemeA - config.rb

require "font-awesome-sass"
http_path = "/skin/frontend/rwd/myThemeA/"
add_import_path "../../../rwd/default/scss"
css_dir = "../css"
sass_dir = "../scss"
images_dir = "../images"
javascripts_dir = "../js"
fonts_dir = "../css/fonts"
relative_assets = true

output_style = :expanded
environment = :production
sourcemap = true

myThemeB - config.rb

require "font-awesome-sass"
http_path = "/skin/frontend/rwd/myThemeB/"
add_import_path "../../../rwd/default/scss"
additional_import_paths = ["../../../rwd/myThemeA/scss"]
css_dir = "../css"
sass_dir = "../scss"
images_dir = "../images"
javascripts_dir = "../js"
fonts_dir = "../../myThemeA/css/fonts"
relative_assets = true

output_style = :expanded
environment = :production
sourcemap = true

所以这里的想法是我们有三个皮肤,我们可以使用导入路径只覆盖某些文件,而不是在每个皮肤中包含每个文件。这也意味着,当我们想要进行全局更改时,取决于我们更改的内容,我们没有进行 3 次更改——只有在它的依赖项位于链中的位置。

所以...

默认是所有皮肤的基础

myThemeA本身就是皮肤,并使用默认值作为默认值

myThemeB使用 myThemeA 作为默认值,而 myThemeA 使用 default 作为默认值。

add_import_path使这项工作有效的是和的放置additional_import_paths。本质上,它add_import_path首先使用定义的作为默认值,然后随后的additional_import_paths数组将覆盖 in 中的add_import_path内容,但是任何未包含在附加值中的内容,它将在默认值中查找。

希望这对寻找有关导入路径的更多信息的任何人都有意义。

于 2014-12-12T18:55:51.257 回答
1

要编译多个.scss文件,您应该使用 . 将“子”文件导入“父”SASS 文件@import "filename";

例如,如果您有 main.scss,您可能希望从名为 child.scss 的子样式表中导入更多 CSS,如下所示:

@import "_modules/child";

据我了解,add_import_path所做的只是允许您从其他目录导入文件。所以你也可以@import_themes/

看到这个线程

于 2012-10-26T13:14:37.737 回答