Можно ли в SASS импортировать файл из другого каталога? Например, если бы у меня была такая структура:
- root_directory
- sub_directory_a
- _common.scss
- template.scss
- sub_directory_b
- more_styles.scss
template.scss может импортировать _common.scss с помощью, @import "common"
но возможно ли для more_styles.scss импортировать _common.scss? Я попробовал несколько различных вещей , в том числе @import "../sub_directory_a/common"
и , @import "../sub_directory_a/_common.scss"
но ничего не похоже на работу.
-I
? Если этот путь изменится, придется много искать и заменять; и для этого требуется та же структура локальных папок, что и у всех, кто использует .scssВы можете использовать
-I
переключатель командной строки или:load_paths
параметр из кода Ruby для добавленияsub_directory_a
в путь загрузки Sass. Итак, если вы используете Sassroot_directory
, сделайте что-нибудь вроде этого:Тогда вы можете просто использовать
@import "common"
вmore_styles.scss
.источник
-I
флаги для включения более одного каталога, напримерsass -I sub_directory_a -I sub_directory_c --watch sub_directory_b:sub_directory_b
Используя webpack с sass-loader, я могу
~
ссылаться на корневой путь проекта. Например, при условии, что структура папок OPs находится в файле внутри sub_directory_b:Документация: https://github.com/webpack-contrib/sass-loader#resolving-import-at-rules
источник
node_modules/
корня проекта, а не из него."sub_directory_a"
к моемуincludePaths
и использовать@import "common";
синтаксис при использовании Angular CLI, который включает sass-loader.~/
это, похоже, не относится к домашнему каталогу для меня. Или любой каталог, который я пытался проверить. Есть ли способ на самом деле попытаться выяснить, к чему это относится?Импорт
.scss
файла, который имеет вложенный импорт с другой относительной позицией, работать не будет. верхний предлагаемый ответ (с использованием большого количества../
) - это просто грязный хакер, который будет работать, пока вы добавите достаточно,../
чтобы добраться до корня ОС развертывания вашего проекта.источник
meteor
, это был просто пример.Выбранный ответ не предлагает жизнеспособного решения.
Практика 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
расширения требуется префикс . Я обнаружил, что это работает независимо. Кто-то завел вопрос , на который пока нет ответа.источник
Gulp выполнит работу по просмотру ваших файлов sass, а также добавит пути к другим файлам с помощью includePaths. пример:
источник
-I
параметр из командной строки, верно?node-sass
(официальная оболочка SASS дляnode.js
) предоставляет параметр командной строки,--include-path
помогающий с такими требованиями.Пример:
В
package.json
:Теперь, если у вас есть файл
src/styles/common.scss
в вашем проекте, вы можете импортировать его в@import 'styles/common';
любом месте вашего проекта.См. Https://github.com/sass/node-sass#usage-1 .
источник
Чтобы определить файл для импорта, можно использовать общие определения всех папок. Вы просто должны знать, что это относительно файла, который вы определяете. Подробнее о возможности импорта с примерами вы можете узнать здесь .
источник
При использовании веб-компилятора в Visual Studio вы можете добавить путь к
includePath
compilerconfig.json.defaults. Тогда нет необходимости в некотором количестве,../
поскольку компилятор будет использовать includePath в качестве местоположения для поиска импорта.Например:
источник
Это половинный ответ.
Обратите внимание на Compass , с его помощью вы можете поместить свой файл
_common.scss
вpartials
папку, а затем импортировать его@import common
, но он работает с каждым файлом.источник
Я столкнулся с той же проблемой. Из моего решения я пришел к этому. Итак, вот ваш код:
Насколько я знаю, если вы хотите импортировать один scss в другой, он должен быть частичным. Когда вы импортируете из другого каталога, назовите ваш
more_styles.scss
в_more_styles.scss
. Затем импортируйте его в свойtemplate.scss
@import../sub_directory_b/_more_styles.scss
. У меня это сработало. Но, как вы упомянули,../sub_directory_a/_common.scss
не работает. Это тот же каталог, что иtemplate.scss
. Вот почему это не сработает.источник
Изучите использование параметра includePaths ...
«Компилятор SASS использует каждый путь в loadPaths при разрешении SASS @imports».
https://stackoverflow.com/a/33588202/384884
источник
Лучше всего использовать sass-loader. Он доступен как пакет npm. Он решает все проблемы, связанные с путями, и делает его очень простым.
источник
У меня была такая же проблема, и я нашел решение, добавив путь к файлу, например:
@import "C: / xampp / htdocs / Scss_addons / Bootstrap / bootstrap";
@import "C: / xampp / htdocs / Scss_addons / Compass / compass";
источник