Вариант препроцессора Vue CLI CSS: dart-sass VS node-sass?

При создании нового проекта с помощью CLI (v3.7.0) можно выбрать компилятор dart-sass или node-sass.

Как они соотносятся друг с другом, если быть более конкретными, чем объявлено в Vue-документы?

A Tip on Sass Performance

Note that when using Dart Sass, synchronous compilation is twice as fast as asynchronous compilation by default, due to the overhead of asynchronous callbacks. To avoid this overhead, you can use the fibers package to call asynchronous importers from the synchronous code path. To enable this, simply install fibers as a project dependency:

npm install -D fibers

Please also be aware, as it's a native module, there may be compatibility issues vary on the OS and build environment. In that case, please run npm uninstall -D fibers to fix the problem.

? 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

РЕДАКТИРОВАТЬ 2020/01: Vue CLI 4.2.2 для создания нового проекта по-прежнему предлагает dart-sass в качестве первого варианта перед node-sass. Тем не менее, здесь было установлено, что node-sass является более эффективным выбором, а почти никто не использует dart-sass (комментарий ccleve).

РЕДАКТИРОВАТЬ 2020/09: Поскольку Али Бахрами обновил свой обширный ответ, dart-sass является предпочтительным выбором как node-sass помечен как устаревший.

Жаль, что dart-sass в версии, скомпилированной с помощью JS, низкая производительность. Однако его разработчики хорошо знают об этом и работают над повышением производительности, как указано в Эта проблема.

По состоянию на февраль 2020 года похоже, что никто не использует dart-sass: npmtrends.com/dart-sass-vs-node-sass. 3,5 миллиона загрузок в неделю для node, 16 000 для dart.

ccleve 10.02.2020 22:23

@ccleve Это потому, что наиболее часто используемый дистрибутив dart-sass находится в пакете sass, который в настоящее время имеет 2 миллиона загрузок в неделю по состоянию на май 2020 года. npmtrends.com/sass-vs-node-sass

sebu 20.05.2020 04:03

Мне любопытно, почему в npm есть две реализации dart-sass. дерзкий в настоящее время является последней версией 1.26.5, а дерзкий дротик — 1.25. Несмотря на это, узел-дерзость по-прежнему затмевает эти два вместе: npmtrends.com/sass-vs-node-sass-vs-dart-sass

orionrush 25.05.2020 13:21

Небольшое обновление, sass обогнал node-sass по состоянию на июль 2021 года!

Tom C 16.09.2021 20:14
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
177
4
67 335
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Обновить 17.09.2020:

Поскольку этот ответ получает голоса каждый день, я подумал, что, возможно, стоит глубже погрузиться в эту тему.


Учитывая веб-сайт sass-lang:

Dart Sass is the primary implementation of Sass, which means it gets new features before any other implementation. It's fast, easy to install, and it compiles to pure JavaScript which makes it easy to integrate into modern web development workflows.

Dart-Sass быстрый, но не JS скомпилированная версия. Практически, когда мы говорим Dart-Sass, есть два варианта:

  • Дарт-Сасс на Дарт-ВМ
  • Dart-Sass на НПМ, который представляет собой чистую скомпилированную версию JS.

Я скомпилировал файл Bootstrap 4 Sass в CSS с помощью Node-Sass, Dart-Sass и Dart-Sass(JS), и вы можете увидеть следующий результат:

Node-Sass and Dart-Sass comparison - source: https://itnext.io/the-css-preprocessor-dilemma-node-sass-or-dart-sass-32a0a096572?source=friends_link&sk=3c465b78a0e1bc98379afd818546fcf4

  • В данном конкретном случае две секунды не имеют большого значения; но учтите, что Dart-Sass(JS) в девять раз медленнее, чем Dart-Sass(Dart VM), и в три раза медленнее, чем node-sass.
  • У меня был проект с +20 темами, с node-sass это заняло 30 секунд, но я пытался использовать Dart-Sass(JS), и это заняло столетие!
  • Хотя Dart-Sass (Dart VM) является самым быстрым, его установка или интеграция немного сложны.
  • И Node-Sass считается устаревшим.

Я ведет блог об этом здесь, вы можете прочитать больше об этом здесь.

В последней строке вы имеете в виду dart-sass быстрее ??

Saksham 30.01.2020 07:24

В чем разница между Dart-Sass on Dart-VM и Dart-Sass NPM?

AnandShiva 14.05.2021 20:39

@AnandShiva Они одинаковы, один из них написан на языке dart и работает в среде выполнения dart, но npm dart sass скомпилирован в javascript.

Ali Bahrami 17.05.2021 09:43

node-sass может быть быстрее, чем dart-sass, но на момент написания этой статьи dart-sass — единственная библиотека, реализующая правило @use, которое настоятельно рекомендуется вместо @import. Согласно официальному веб-сайт sass-lang:

What’s Wrong With @import? The @import rule has a number of serious issues:

  • @import makes all variables, mixins, and functions globally accessible. This makes it very difficult for people (or tools) to tell where anything is defined.

  • Because everything’s global, libraries must prefix to all their members to avoid naming collisions.

  • @extend rules are also global, which makes it difficult to predict which style rules will be extended.

  • Each stylesheet is executed and its CSS emitted every time it’s @imported, which increases compilation time and produces bloated output.

  • There was no way to define private members or placeholder selectors that were inaccessible to downstream stylesheets.

The new module system and the @use rule address all these problems.

Кроме того, @import будет постепенно прекращено в течение следующих нескольких лет и в конечном итоге будет полностью удален из языка.

Чтобы быть в курсе лучших практик Sass, вам следует использовать dart-sass (т. е. дерзкий) на данный момент.

Очень интересно @rasnauf, большое спасибо, что указали на это! В некоторых проектах, которые импортируют файлы .scss больших библиотек, внесение даже крошечных изменений в файл .scss было очень медленным, и приходилось ждать, пока все файлы будут перестроены... О чем я читал @use на на данный момент кажется, что это может значительно сократить время пересборки с помощью инкрементных сборок во время разработки :)

ux.engineer 15.08.2020 10:48

24.01.2021

Как написано в официальном документ node-sass github, node-sass — устарел.

Warning: LibSass and Node Sass are deprecated. While they will continue to receive maintenance releases indefinitely, there are no plans to add additional features or compatibility with any new CSS or Sass features. Projects that still use it should move onto Dart Sass.

Так что я думаю, было бы лучше выбрать dart sass, если вы планируете долгосрочную перспективу или хотите быть в курсе последних событий.

Другие вопросы по теме