Вариант предварительного процессора CSS Vue CLI: dart-sass VS node-sass?
При создании нового проекта с помощью CLI (v3.7.0) существует возможность выбора между dart-sass
или же node-sass
компилятор.
Как они соотносятся друг с другом, чтобы быть более конкретными, чем заявлено в Vue Docs?
Совет по Sass Performance
Обратите внимание, что при использовании Dart Sass синхронная компиляция в два раза быстрее асинхронной компиляции по умолчанию из-за накладных расходов асинхронных обратных вызовов. Чтобы избежать этих издержек, вы можете использовать пакет волокон для вызова асинхронных импортеров из пути синхронного кода. Чтобы включить это, просто установите волокна как зависимость проекта:
npm install -D fibers
Также имейте в виду, что, поскольку это собственный модуль, могут возникнуть проблемы с совместимостью ОС и среды сборки. В этом случае, пожалуйста, запустите
npm uninstall -D fibers
решить проблему.
? Pick a CSS pre-processor (PostCSS, Autoprefixer and CSS Modules are supported by default): (Use arrow keys)
❯ Sass/SCSS (with dart-sass)
Sass/SCSS (with node-sass)
Less
Stylus
3 ответа
Согласно официальному сайту sass-lang:
Dart Sass является основной реализацией Sass, что означает, что он получает новые функции перед любой другой реализацией. Он быстрый, простой в установке и компилируется в чистый JavaScript, что облегчает его интеграцию в современные рабочие процессы веб-разработки.
Dart-Sass работает быстро, если вы запускаете его внутри Dart-VM, но он говорит, что компилируется в чистый JS. Пакет npmjs dart-sass
это просто скомпилированная версия, которая медленнее, чем node-sass
или же native dart-sass
,
Если вы ищете измерения, я рекомендую прочитать об этом здесь, есть образцы и разные номера:
Это первое измерение с использованием Dart Sass в качестве заранее скомпилированного нативного кода, и результаты обнадеживают. Это намного ниже порога в 100 мс для крошечных файлов, и он находится на одном уровне с SassC для большинства тестовых случаев. SassC по-прежнему лидирует для тестов со многими расширениями, хотя и незначительно, и для одного из наших реальных тестовых случаев (хотя Dart Sass ведет в других). Две реализации могут быть справедливо описаны как имеющие примерно одинаковую производительность в целом.
Dart Sass на узле все еще существенно медленнее, чем на Dart VM, и это относительное замедление становится более выраженным по мере того, как необработанный код Dart становится быстрее. Решения для этого, такие как [встроенный протокол][] или [поддержка WebAssembly][], становятся все более и более важными.
Мой личный опыт использования dart-sass
пакет npmjs вместо node-sass
(который js
обёртка родного C
библиотека) это что dart-sass
намного (для меня по крайней мере в 50 раз, потому что у меня много больших файлов тем) медленнее, чем node-sass
,
24.01.2021
Как написано в официальной документации node-sass на github , node-sass устарел .
Предупреждение : LibSass и Node Sass устарели . Хотя они будут продолжать получать обновления на неопределенный срок, мы не планируем добавлять дополнительные функции или совместимость с какими-либо новыми функциями CSS или Sass. Проекты, которые все еще используют его, должны перейти на Dart Sass.
Так что я думаю, было бы лучше выбрать dart sass, если вы планируете долгосрочную перспективу или хотите быть в курсе последних событий.
Node -sass может быть быстрее, чем dart-sass, но на момент написания этого dart-sass является единственной библиотекой, которая реализует @use
правило, которое настоятельно рекомендуется @import
. Согласно официальному сайту sass-lang:
Что случилось с
@import
? В@import
Правило имеет ряд серьезных проблем:
@import
делает все переменные, миксины и функции глобально доступными. Из-за этого людям (или инструментам) очень сложно сказать, где что-то определено.Поскольку все глобально, библиотеки должны добавлять префиксы ко всем своим членам, чтобы избежать конфликтов имен.
@extend
правила также являются глобальными, что затрудняет прогнозирование того, какие правила стиля будут расширены.Каждая таблица стилей выполняется и ее CSS генерируется каждый раз, когда она
@import
ed, что увеличивает время компиляции и дает раздутый вывод.Не было возможности определить частные члены или селекторы заполнителей, которые были недоступны для последующих таблиц стилей.
Новая модульная система и
@use
Правило решает все эти проблемы.
Дополнительно, @import
будет постепенно сокращаться в течение следующих нескольких лет и в конечном итоге полностью удален из языка.
Чтобы быть в курсе лучших практик Sass, вам следует использовать dart-sass (т.е. sass).