Опція попереднього процесора Vue CLI CSS: dart-sass VS node-sass?


122

При створенні нового проекту з CLI (v3.7.0), є можливість вибрати між dart-sassабо node-sassкомпілятором.

Як вони порівнюються між собою, щоб бути більш конкретними, ніж заявлено в документах Vue ?

Порада щодо продуктивності Sass

Зверніть увагу, що при використанні Dart Sass синхронна компіляція вдвічі швидша за асинхронну компіляцію за замовчуванням через накладні витрати на асинхронні зворотні виклики. Щоб уникнути цих накладних витрат, ви можете використовувати пакет fiber для виклику асинхронних імпортерів із шляху синхронного коду. Щоб увімкнути це, просто встановіть волокна як залежність від проекту:

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

EDIT 2020/01: Vue CLI 4.2.2 створити новий проект все ще пропонується dart-sassяк перший варіант раніше node-sass. Проте тут було встановлено, що node-sassце найефективніший вибір, і майже ніхто не використовує dart- sass (коментар ccleve).

EDIT 2020/09: Як Алі Bahrami оновив свій відповідаю розгорнуто, dart-sassє кращим вибором , як node-sassв даний час відзначений як застарілий .

Шкода, що dart-sassкомпільована JS версія має низьку продуктивність. Однак розробники це добре знають і працюють над підвищенням продуктивності, як зазначено у цьому випуску .


4
Станом на лютий 2020 року, схоже, ніхто не використовує dart- sass : npmtrends.com/dart-sass-vs-node-sass . 3,5 мільйона завантажень на тиждень вузла, 16000 для дротиків.
ccleve

3
@ccleve Це тому, що найпоширеніший розподіл dart-sass знаходиться в пакеті sass, який наразі має 2 мільйони завантажень щотижня станом на травень 2020 року. npmtrends.com/sass-vs-node-sass
20:00

1
Мені цікаво, чому на npm є дві реалізації dart-sass. На даний момент sass є останньою версією 1.26.5, а dart-sass 1.25. Незалежно від node-sass все ще карлики ці два об'єднані: npmtrends.com/sass-vs-node-sass-vs-dart-sass
orionrush

Відповіді:


123

Оновлення 17.09.2020 :

Оскільки ця відповідь щодня набирає голосів, я подумав, можливо, варто заглибитися глибше в цю тему.


Розглядаючи веб-сайт sass-lang :

Dart Sass - це основна реалізація Sass, що означає, що вона отримує нові функції перед будь-якою іншою реалізацією. Це швидко, легко встановлюється і компілюється на чистий JavaScript, що полегшує інтеграцію в сучасні робочі процеси веб-розробки.

Dart-Sass швидко працює, але не компільована версія JS . Практично, коли ми говоримо Дарт-Сасс, є два варіанти:

  • Dart-Sass на Dart-VM
  • Dart-Sass на NPM, що є чистою компільованою версією JS

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

Порівняння Node-Sass та Dart-Sass - джерело: https://itnext.io/the-css-preprocessor-dilemma-node-sass-or-dart-sass-32a0a096572?source=friends_link&sk=3c465b78a0e1bc98379afd818546fc8

  • У цьому конкретному випадку дві секунди - це не велика проблема; але врахуйте, що Дарт-Сасс (JS) в дев'ять разів повільніший за Дарт-Сасс (Дарт ВМ) і втричі повільніший за Вузол-Сасс.
  • У мене був проект з +20 темами, на node-sass пішло 30 секунд, але я спробував використовувати Dart-Sass (JS), і це зайняло століття!
  • Хоча Dart-Sass (Dart VM) є найшвидшим, але встановити або інтегрувати його трохи складно.
  • А Node-Sass вважається застарілим .

Я писав про це в блозі тут, більше про це ви можете прочитати тут.


1
У останньому рядку, ти маєш на увазі dart-sassшвидше?
Saksham

6

node-sass може бути швидшим, ніж dart-sass, але на момент написання цього dart-sass є єдиною бібліотекою, яка реалізує @useправило, яке настійно рекомендується @import. Згідно з офіційним веб-сайтом sass-lang :

Що не так @import? @importПравило має ряд серйозних проблем:

  • @importробить усі змінні, комбінації та функції глобально доступними. Це дуже ускладнює людину (або інструменти), щоб сказати, де що визначено.

  • Оскільки все глобальне, бібліотеки повинні мати префікс для всіх своїх членів, щоб уникнути зіткнень імен.

  • @extend правила також є загальносвітовими, що ускладнює передбачення, які правила стилю будуть розширені.

  • Кожна таблиця стилів виконується, а її CSS видається кожного разу, коли вона видається @import, що збільшує час компіляції та видає здуті результати.

  • Не було можливості визначити приватних членів або селектори заповнювачів, які були недоступні для таблиць стилів.

Нова система модулів та @useправило вирішують усі ці проблеми.

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

Для того, щоб бути в курсі найкращих практик у Sass, наразі вам слід використовувати dart-sass (тобто sass ).


1
Крім того, порівняння популярності між dart-sass та node-sass є надзвичайно хибним, враховуючи, що більшість людей використовують sass замість dart-sass , обидва з яких є розповсюдженням Dart Sass .
rasnauf

Дуже цікаво @rasnauf, велике спасибі, що вказав на це! З деякими проектами, які імпортують файли .scss великих бібліотек, було дуже повільно вносити навіть незначну зміну у файл .scss і доводилось чекати, поки всі файли будуть відновлені ... Про те, про що я читав @useу цій статті точка, здається, це могло б істотно покращити час відновлення за допомогою поступових збірок під час виконання dev :)
ux.engineer
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.