所选答案没有提供可行的解决方案。
OP 的做法似乎不规律。共享/公共文件通常位于标准样板目录partials 下。然后,您应该将 partials 目录添加到配置导入路径中,以便在代码中的任何位置解析部分。
当我第一次遇到这个问题时,我认为 SASS 可能会给你一个类似于 Node 的 __dirname 的全局变量,它保留了当前工作目录的绝对路径 (cwd)。不幸的是,它没有,原因是因为无法对 @import 指令进行插值,因此您无法执行动态导入路径。
根据SASS docs.
你需要在你的 Sass 配置中设置:load_paths。由于 OP 使用 Compass,我将按照文档 here 进行操作。
您可以按照目的使用 CLI 解决方案,但为什么呢?将其添加到config.rb 会更方便。使用 CLI 覆盖 config.rb 是有意义的(例如,不同的构建场景)。
因此,假设您的 config.rb 位于项目根目录下,只需添加以下行:
add_import_path 'sub_directory_a'
现在@import 'common'; 可以在任何地方正常工作。
虽然这回答了 OP,但还有更多。
附录
您可能会遇到想要以嵌入式方式导入 CSS 文件的情况,也就是说,不是通过 CSS 提供的开箱即用的 vanilla @import 指令,而是实际 将 CSS 文件内容与您的 SASS 合并。还有另一个question,答案没有定论(该解决方案不能跨环境工作)。那么解决方案就是使用this SASS 扩展。
安装后,将以下行添加到您的配置中:require 'sass-css-importer',然后在代码中的某处添加:@import 'CSS:myCssFile';
请注意,必须省略扩展才能使其正常工作。
但是,当我们尝试从非默认路径导入 CSS 文件并且add_import_path 不尊重 CSS 文件时,我们会遇到同样的问题。因此,要解决这个问题,您需要在配置中添加另一行,这自然是相似的:
add_import_path Sass::CssImporter::Importer.new('sub_directory_a')
现在一切都会很好。
附:
我注意到sass-css-importer 文档表明除了省略.css 扩展外,还需要CSS: 前缀。我发现它无论如何都有效。有人发起了issue,到目前为止仍未得到答复。