Мы добавили возможность встраивать партиалы @import
CSS. Это значительно отличается от поведения Ruby Sass (которое вообще этого не допускает) и вполне понятно вызывает боль .
Нам нужна опция контекста, чтобы включить / отключить эту функцию. По умолчанию он должен быть отключен.
Я думаю, что формулировка немного вводит в заблуждение. Мы разрешаем импорт только частичных файлов css (файлы, оканчивающиеся на .css, останутся фактическим импортом в коде). Также Ruby Sass не разрешает это по умолчанию, но некоторые инструменты (в том числе компас AFAIK) включают это по умолчанию для Ruby Sass. Я также не уверен, действительно ли мы хотим отключить его по умолчанию, поскольку это будет еще одно потенциально критическое изменение.
class CSSImporter < Sass::Importers::Filesystem
def extensions
super.merge('css' => :scss)
end
end
Sass::Plugin.options[:filesystem_importer] = CSSImporter
Полное раскрытие информации Я все же считаю, что эту функцию следует удалить. Наша директива - делать то, что делает Ruby Sass. Любое отклонение от их реализации нарушает переносимость и неотличимо от ошибки.
Также Ruby Sass не разрешает это по умолчанию, но несколько инструментов (также AFAIK compass) включают это по умолчанию для Ruby Sass.
Это не наша работа. Это относится к таким инструментам, как резиновые сапоги и очки.
Я также не уверен, действительно ли мы хотим отключить его по умолчанию
Я искренне верю, что так и должно быть.
это было бы еще одно потенциально критическое изменение
Текущее поведение нарушено для пользователей Sass.
Думаю, ясно, что я за наличие этой функции, и просто хотел указать, что поломка в основном связана с тем, что я реализовал сообщение об ошибке для неоднозначного импорта для libsass 3.3.0. Кроме того, по умолчанию мы различаемся только частичным разрешением (включая расширение css), и я бы сказал, что обычно вы не генерируете и не имеете css с тем же именем рядом с _partial_ импортом. Не уверен, когда я смогу реализовать это в качестве опции в C-API. Соавторы приветствуются;)
Я думаю, что в идеале они оба поддерживают эту функцию. Следующим лучшим вариантом было бы, как говорит @xzyfer, и по крайней мере, чтобы они были последовательными, даже если это означает, что ни один из них не поддерживает его.
Теоретически у вас должна быть возможность переключиться с libsass на ruby sass без каких-либо сбоев. Иметь что-то, что сознательно предотвратит это, imo - это плохо.
Теоретически у вас должна быть возможность переключиться с libsass на ruby sass без каких-либо поломок.
Точно.
Следующее, что лучше всего было бы, как говорит @xzyfer, и, по крайней мере, чтобы они были последовательными
Это то, что мы будем делать.
Sass 4.0 предоставит способ сделать это должным образом.
Фантастический! Не могу дождаться.
@mgreter Я говорил об этой проблеме с @chriseppstein и @ nex3 . Мы решили, что даже несмотря на то, что встроенный импорт CSS сильно нарушает совместимость с Ruby Sass, удаление этой функции, вероятно, расстроит пользователей. Это давно запрашиваемая функция в Ruby Sass, что было невозможно из-за ограничений надмножества CSS. В результате почти некоторые люди зависят от такого поведения.
Вместо этого давайте постараемся удалить это в 4.0, поскольку пользователи более склонны к критическим изменениям в основных выпусках, и потому что у нас будет официальный способ встроить импорт CSS.
Недавно мы перешли на последнюю версию Node с гораздо более старой версии, и нам пришлось обновить стороннюю библиотеку, которую мы используем, чтобы она была совместима с текущей версией Node. Теперь из-за этой ошибки все ломается. Я понимаю, что эта проблема еще не решена в libsass, поэтому я пытаюсь рекурсивно выяснить, к каким версиям наших зависимостей нам нужно будет вернуться, чтобы избавиться от этой проблемы.
Итак, несколько вопросов (извините, если я пропустил эту информацию здесь, эта ветка немного запутана):
В какой версии libsass появилась эта ошибка?
Я не могу быть уверен. Я думаю, что это было около 3.3.0, которое находится в [email protected].
В какую версию входит исправление - 3.5? 4.0?
Это будет исправлено в 4.0 после приземления @use
. Это позволит людям явно соглашаться на импорт CSS.
Когда планируется выпуск этой версии?
К сожалению, сказать невозможно. Вряд ли в этом году.
В стороне, если вы используете node-sass, вы можете написать собственный импортер для импорта noop для файлов .css.
Как сказал @xzyfer , попробуйте собственный импортер, у меня была проблема, когда у нас были файлы .scss и .css в одном каталоге, и вот импортер, который я сделал для node-sass
importer: function(url, prev, done) {
// Use this to import scss files, instead of css ones
let updatedUrl = url;
if (!url.endsWith('.scss') && !url.endsWith('.css')) { // Also don't change ones already explicitly set to .css
updatedUrl += '.scss';
}
grunt.verbose.writeln(`Changed ${url} into ${updatedUrl}`);
done({file: updatedUrl});
}
Протестировано с помощью node-sass 4.5.2 libsass 3.5.0-beta2
Самый полезный комментарий
Как сказал @xzyfer , попробуйте собственный импортер, у меня была проблема, когда у нас были файлы .scss и .css в одном каталоге, и вот импортер, который я сделал для node-sass
Протестировано с помощью node-sass 4.5.2 libsass 3.5.0-beta2