Libsass: Добавить параметр для управления поведением встроенного импорта CSS

Созданный на 28 окт. 2015  ·  11Комментарии  ·  Источник: sass/libsass

Мы добавили возможность встраивать партиалы @import CSS. Это значительно отличается от поведения Ruby Sass (которое вообще этого не допускает) и вполне понятно вызывает боль .

Нам нужна опция контекста, чтобы включить / отключить эту функцию. По умолчанию он должен быть отключен.

Bug - Confirmed Dev - PR Ready Invalid - Not in Sass

Самый полезный комментарий

Как сказал @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

Все 11 Комментарий

Я думаю, что формулировка немного вводит в заблуждение. Мы разрешаем импорт только частичных файлов 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, поэтому я пытаюсь рекурсивно выяснить, к каким версиям наших зависимостей нам нужно будет вернуться, чтобы избавиться от этой проблемы.

Итак, несколько вопросов (извините, если я пропустил эту информацию здесь, эта ветка немного запутана):

  1. В какой версии libsass появилась эта ошибка?
  2. В какую версию входит исправление - 3.5? 4.0?
  3. Когда планируется выпуск этой версии? (Или, может быть, он уже был выпущен?)

В какой версии 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

Была ли эта страница полезной?
0 / 5 - 0 рейтинги