ตัวเลือกพรีโปรเซสเซอร์ Vue CLI CSS: dart-sass VS node-sass?


122

เมื่อสร้างโครงการใหม่ด้วย CLI (v3.7.0) มีตัวเลือกให้เลือกระหว่างdart-sassหรือnode-sassคอมไพเลอร์

เหล่านี้จะเปรียบเทียบวิธีการแต่ละอื่น ๆ ที่จะเฉพาะเจาะจงมากขึ้นกว่าที่ประกาศไว้ในเอกสาร Vue ?

เคล็ดลับเกี่ยวกับประสิทธิภาพของ Sass

โปรดทราบว่าเมื่อใช้ Dart Sass การคอมไพล์แบบซิงโครนัสจะเร็วกว่าการคอมไพล์แบบอะซิงโครนัสเป็นสองเท่าโดยค่าเริ่มต้นเนื่องจากค่าใช้จ่ายของการเรียกกลับแบบอะซิงโครนัส เพื่อหลีกเลี่ยงค่าใช้จ่ายนี้คุณสามารถใช้แพ็คเกจ fibre เพื่อเรียกผู้นำเข้าแบบอะซิงโครนัสจากเส้นทางรหัสซิงโครนัส ในการเปิดใช้งานสิ่งนี้เพียงแค่ติดตั้งเส้นใยเป็นการพึ่งพาโครงการ:

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

แก้ไข 2020/01:วู CLI 4.2.2 สร้างโครงการใหม่ยังคงแนะนำเป็นตัวเลือกแรกก่อนdart-sass node-sassยังได้รับการยอมรับที่นี่ซึ่งnode-sassเป็นตัวเลือกที่มีประสิทธิภาพมากกว่าและแทบไม่มีใครใช้ dart-sass (ความคิดเห็นของ ccleve)

แก้ไข 2020/09:ในฐานะที่เป็นอาลี Bahrami ปรับปรุงคำตอบที่กว้างขวางของเขาdart-sassเป็นทางเลือกที่เป็นจะถูกทำเครื่องหมายว่าเลิกnode-sass

น่าเสียดายที่dart-sassเป็นเวอร์ชันที่คอมไพล์ด้วย JS มีประสิทธิภาพต่ำ อย่างไรก็ตามนักพัฒนาซอฟต์แวร์ตระหนักดีถึงเรื่องนี้และกำลังดำเนินการเพื่อเพิ่มประสิทธิภาพตามที่ระบุไว้ในปัญหานี้


4
ในฐานะของกุมภาพันธ์ 2020 ปรากฏว่าไม่มีใครใช้โผเขื่อง: npmtrends.com/dart-sass-vs-node-sass 3.5 ล้านดาวน์โหลดต่อสัปดาห์ของโหนด 16,000 สำหรับโผ
ccleve

3
@ccleve นั่นเป็นเพราะการกระจาย dart-sass ที่ใช้กันมากที่สุดอยู่ในแพ็คเกจ sass ซึ่งปัจจุบันมีการดาวน์โหลด 2 ล้านครั้งต่อสัปดาห์ ณ เดือนพฤษภาคม 2020 npmtrends.com/sass-vs-node-sass
sebu

1
ฉันสงสัยว่าเหตุใดจึงมีการใช้งาน dart-sass สองรายการใน npm ปัจจุบันsassเป็นรุ่นล่าสุดที่ v 1.26.5 ในขณะที่dart-sassอยู่ที่ 1.25 ไม่ว่าnode-sass จะยังคงแคระสองสิ่งนี้รวมกัน: npmtrends.com/sass-vs-node-sass-vs-dart-sass
orionrush

คำตอบ:


123

ปรับปรุง17/17/2020 :

เนื่องจากคำตอบนี้ได้รับการโหวตเพิ่มขึ้นทุกวันฉันคิดว่าอาจจะคุ้มค่าที่จะดำดิ่งลงไปในหัวข้อนี้


พิจารณาเว็บไซต์ sass-lang :

Dart Sass เป็นการใช้งานหลักของ Sass ซึ่งหมายความว่าจะได้รับคุณสมบัติใหม่ก่อนการใช้งานอื่น ๆ รวดเร็วติดตั้งง่ายและรวบรวมเป็น JavaScript บริสุทธิ์ซึ่งทำให้ง่ายต่อการรวมเข้ากับเวิร์กโฟลว์การพัฒนาเว็บสมัยใหม่

โผ Sass เป็นไปอย่างรวดเร็ว แต่ไม่JS รุ่นรวบรวม ในทางปฏิบัติเมื่อเราพูดว่า Dart-Sass มีสองทางเลือก:

  • 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=3c465b78a0e1bc98379afd818546fcf4

  • ในกรณีนี้สองวินาทีไม่ใช่เรื่องใหญ่ แต่ถือว่า Dart-Sass (JS) ช้ากว่า Dart-Sass (Dart VM) เก้าเท่าและช้ากว่า node-sass สามเท่า
  • ฉันมีโปรเจ็กต์ที่มีธีม +20 ใช้เวลา 30 วินาทีกับ node-sass แต่ฉันพยายามใช้ Dart-Sass (JS) และใช้เวลาเป็นศตวรรษ!
  • แม้ว่า Dart-Sass (Dart VM) จะเร็วที่สุด แต่การติดตั้งหรือรวมเข้าด้วยกันนั้นค่อนข้างยุ่งยาก
  • และ Node-Sass ถือว่าเลิก

ฉันเขียนบล็อกเกี่ยวกับเรื่องนี้ที่นี่คุณสามารถอ่านเพิ่มเติมได้ที่นี่


1
ที่บรรทัดสุดท้ายคุณหมายความว่าdart-sassเร็วกว่าหรือไม่ ??
Saksham

6

โหนดเขื่องอาจจะเร็วกว่าโผเขื่อง แต่เป็นที่เขียนนี้โผเขื่องเป็นห้องสมุดที่เดียวที่ดำเนินการกฎซึ่งขอแนะนำมากกว่า@use @importตามเว็บไซต์sass-langอย่างเป็นทางการ:

เกิดอะไรขึ้น@import? @importกฎมีจำนวนของปัญหาร้ายแรง:

  • @importทำให้ตัวแปรมิกซ์อินและฟังก์ชันทั้งหมดสามารถเข้าถึงได้ทั่วโลก สิ่งนี้ทำให้ผู้คน (หรือเครื่องมือ) บอกได้ยากมากว่าสิ่งใดถูกกำหนดไว้ที่ไหน

  • เนื่องจากทุกสิ่งเป็นทั่วโลกห้องสมุดจึงต้องนำหน้าสมาชิกทั้งหมดเพื่อหลีกเลี่ยงการชนกันของการตั้งชื่อ

  • @extend กฎยังเป็นแบบสากลซึ่งทำให้ยากที่จะคาดเดาว่าจะขยายกฎสไตล์ใด

  • แต่ละสไตล์ชีทจะถูกเรียกใช้งานและ CSS จะถูกปล่อยออกมาทุกครั้งที่มีการ@importแก้ไขซึ่งจะเพิ่มเวลาในการคอมไพล์และสร้างเอาต์พุตที่ขยาย

  • ไม่มีวิธีกำหนดสมาชิกส่วนตัวหรือตัวเลือกตัวยึดตำแหน่งที่ไม่สามารถเข้าถึงสไตล์ชีตดาวน์สตรีมได้

ระบบโมดูลใหม่และ@useกฎจะแก้ไขปัญหาเหล่านี้ทั้งหมด

นอกจากนี้@importจะค่อยๆยุติลงในอีกไม่กี่ปีข้างหน้าและในที่สุดก็ถูกลบออกจากภาษาทั้งหมด

เพื่อให้ได้รับข้อมูลล่าสุดเกี่ยวกับแนวทางปฏิบัติที่ดีที่สุดใน Sass คุณควรใช้ dart-sass (เช่นsass ) ในตอนนี้


1
นอกจากนี้ยังมีการเปรียบเทียบความนิยมระหว่างโผเขื่องและโหนดเขื่องเป็นเลศนัยมากเมื่อพิจารณาจากคนส่วนใหญ่ใช้เขื่องแทนโผเขื่องซึ่งทั้งสองมีการกระจายของโผ Sass
rasnauf

@rasnauf น่าสนใจมากขอบคุณมากที่ชี้ให้เห็น! ด้วยบางโปรเจ็กต์ที่กำลังนำเข้าไฟล์. scss ของไลบรารีขนาดใหญ่การทำการเปลี่ยนแปลงเล็ก ๆ น้อย ๆ เป็นไฟล์. scss และต้องรอให้ไฟล์ทั้งหมดถูกสร้างใหม่ ... สำหรับสิ่งที่ฉันได้อ่านเกี่ยวกับ@useสิ่งนี้ ประเด็นดูเหมือนว่าสิ่งนี้สามารถปรับปรุงเวลาในการสร้างใหม่ได้อย่างมากด้วยการสร้างที่เพิ่มขึ้นในขณะที่ทำ dev :)
ux.engineer
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.