Выбранный ответ не предлагает жизнеспособного решения.
Практика OP кажется нерегулярной. Общий / общий файл обычно находится partials
в стандартном шаблонном каталоге. Затем вам следует добавить partials
каталог в пути импорта конфигурации, чтобы разрешить частичные данные в любом месте вашего кода.
Когда я впервые столкнулся с этой проблемой, я подумал, что SASS, вероятно, предоставляет вам глобальную переменную, аналогичную переменной Node __dirname
, которая хранит абсолютный путь к текущему рабочему каталогу ( cwd
). К сожалению, это не так, и причина в том, что интерполяция на@import
директивы невозможна, поэтому вы не можете использовать динамический путь импорта.
Согласно документам SASS .
Вам нужно установить :load_paths
в вашей конфигурации Sass. Поскольку OP использует Compass, я буду следовать этому в соответствии с документацией здесь .
Вы можете использовать решение CLI по назначению, но почему? его гораздо удобнее добавлять config.rb
. Было бы разумно использовать CLI для переопределенияconfig.rb
(например, различные сценарии сборки).
Итак, если вы config.rb
находитесь в корневом каталоге проекта, просто добавьте следующую строку:
add_import_path 'sub_directory_a'
И теперь @import 'common';
будет нормально работать где угодно.
Хотя это отвечает на OP, есть еще кое-что.
Приложение
Вы, вероятно, столкнетесь со случаями, когда вы хотите импортировать файл CSS встроенным способом, то есть не через стандартную @import
директиву, которую CSS предоставляет из коробки, а фактическое слияние содержимого файла CSS с вашим SASS. Есть еще один вопрос , на который нет однозначного ответа (решение не работает в кросс-среде). Тогда решение - использовать это расширение SASS.
После установки добавьте в конфигурацию следующую строку: require 'sass-css-importer'
а затем где-нибудь в своем коде:@import 'CSS:myCssFile';
Обратите внимание, что расширение должно быть опущено, чтобы это работало.
Однако мы столкнемся с той же проблемой при попытке импортировать файл CSS по пути, отличному от пути по умолчанию, и add_import_path
не учитывать файлы CSS. Итак, чтобы решить эту проблему, вам нужно добавить еще одну строку в вашу конфигурацию, которая, естественно, похожа:
add_import_path Sass::CssImporter::Importer.new('sub_directory_a')
Теперь все будет работать нормально.
PS, я заметил, что в sass-css-importer
документации указано, что CSS:
в дополнение к отсутствию .css
расширения требуется префикс . Я обнаружил, что это работает независимо. Кто-то завел вопрос , на который пока нет ответа.
-I
? Если этот путь изменится, придется много искать и заменять; и для этого требуется та же структура локальных папок, что и у всех, кто использует .scss