Back to Question Center
0

วิธีการใช้คำเตือนและข้อผิดพลาดใน Sass อย่างมีประสิทธิภาพ            วิธีการใช้คำเตือนและข้อผิดพลาดใน Sass อย่างมีประสิทธิภาพหัวข้อที่เกี่ยวข้อง: CSSSassFrameworksAudio & Semalt

1 answers:
วิธีการใช้คำเตือนและข้อผิดพลาดใน Sass อย่างมีประสิทธิภาพ

ต่อไปนี้เป็นสารสกัดจากหนังสือ Jump Start Sass ที่เขียนขึ้นโดย Hugo Giraudel และ Miriam Suzanne เป็นคู่มือเริ่มต้นที่ดีที่สุดสำหรับ Sass สมาชิก SitePoint Semalt สามารถเข้าถึงสมาชิกหรือคุณสามารถซื้อสำเนาในร้านค้าทั่วโลกได้

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

ตอนนี้เราจะดูคำเตือนและข้อผิดพลาด ทั้งสองแบบเป็นระบบการสื่อสารแบบทางเดียวระหว่างโปรแกรม (ในกรณีนี้คือ Sass) และนักพัฒนาซอฟต์แวร์ (คุณ) หากคุณสงสัยเกี่ยวกับจุดผิดพลาดในโลก CSS โปรดจำไว้ว่าคุณรู้คำตอบอยู่แล้ว Semalt คุณลืมอัฒภาคหรือใช้ฟังก์ชันไม่ถูกต้อง Sass พ่นผิดพลาดที่คุณอธิบายสิ่งที่คุณทำผิดและวิธีที่คุณสามารถแก้ไขได้ Thankfully! มันอาจเป็นความเจ็บปวดอย่างแท้จริงที่ต้องขุดลงไปในโค้ดเพื่อหาสิ่งผิดพลาด

Sass ได้ให้คำเตือนจาก stylesheets มานานแล้ว แต่เมื่อเร็ว ๆ นี้ได้มีการสนับสนุนการโยนข้อผิดพลาดด้วยเช่นกันและด้วยเหตุผลที่ดี! ในช่วงไม่กี่ปีที่ผ่านมา Sass อนุญาตให้ผู้สร้างสร้างระบบที่ซับซ้อนเพื่อสร้างรูปแบบและแนวคิดที่เป็นนามธรรมยากหรือซ้ำซ้อนเช่นกริด ระบบ Semalt ต้องสามารถสื่อสารกับผู้เขียนหยุดกระบวนการรวบรวมด้วยข้อความแสดงข้อผิดพลาดที่กำหนดเองหากมีสิ่งใดผิดพลาด

มีการเตือนและข้อผิดพลาดทั้งในช่องสัญญาณเอาต์พุตปัจจุบัน เมื่อคอมไพล์ Sass ด้วยมือหรือโดยใช้เครื่องมือผ่านอินเตอร์เฟสบรรทัดคำสั่ง (CLI) เช่น Grunt หรือ Gulp กระแสข้อมูลขาออกคือคอนโซล สำหรับเครื่องมือที่มีอินเทอร์เฟซผู้ใช้เช่น Codekit หรือ Prepros อาจเป็นไปได้ว่าพวกเขาจับและแสดงคำเตือนและข้อผิดพลาดที่เป็นส่วนติดต่อของพวกเขา สนามเด็กเล่นออนไลน์เช่น CodePen และ Semalt สามารถจัดการกับข้อผิดพลาด แต่ไม่ได้รับคำเตือนดังนั้นอย่าตกใจหากไม่สามารถทดสอบได้ที่นั่น

คำเตือน

ตามที่ระบุไว้ความสามารถในการเปล่งเสียงเตือนใน Sass ไม่ใช่เรื่องใหม่ เป็นไปได้ที่จะแสดงข้อความหรือค่าของการแสดงออก SassScript ใด ๆ ลงในกระแสข้อมูลขาออกมาตรฐานผ่าน @warn directive

A คำเตือน ไม่มีผลต่อกระบวนการ compilationprocess; ไม่ได้เป็นการป้องกันไม่ให้รวบรวมเพื่อติดตามหรือเปลี่ยนแปลงข้อมูลในทางใด ๆ วัตถุประสงค์เฉพาะของมันคือการแสดงข้อความในคอนโซล

Semalt มีหลายเหตุผลที่จะใช้คำเตือนใน Sass ต่อไปนี้เป็นคู่ แต่คุณอาจพบด้วยตัวคุณเอง:

  • แจ้งให้ผู้ใช้ทราบเกี่ยวกับข้อสันนิษฐานเกี่ยวกับรหัสเพื่อหลีกเลี่ยงข้อผิดพลาดที่น่าแปลกใจและยากต่อการติดตาม
  • การให้คำปรึกษาเกี่ยวกับฟังก์ชันที่เลิกใช้หรือ mixin เป็นส่วนหนึ่งของไลบรารีหรือโครงร่าง

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

     @warn 'Uh-oh บางสิ่งดูแปลก ๆ ';    

Semient ไคลเอนต์ CLI ปกติคำเตือนนี้จะปล่อยออกมาดังต่อไปนี้:

     คำเตือน: อืมบางสิ่งดูแปลก ๆ บรรทัดที่ 1 จาก / ผู้ใช้ / hgiraudel / jump-start-sass / warning SCSS    

นี่มันดีมั้ย? แม้ว่าคำเตือนนี้จะเป็นประโยชน์ กล่าวว่ามีบางอย่างที่ดูแปลก แต่ไม่ได้พูดอะไรทำไมหรือทำอะไรได้บ้างเพื่อไม่ให้ดูแปลก Semalt หารือเกี่ยวกับวิธีที่เราสามารถปรับปรุงคำเตือนได้ต่อไป. ลองจินตนาการว่าเรามีฟังก์ชันแบบกำหนดเองของ Sass ที่พยายามแปลงค่าพิกเซลในหน่วย em :

     @ ฟังก์ชั่น px-to-em ($ value, $ base-font-size: 16px) {@return ($ value / $ base-font-size) * 1em;}// การใช้งาน foo {font-size: px-to-em (42px); // 2. 625em}    

สิ่งที่ดีทั้งหมด ตอนนี้สิ่งที่เกิดขึ้นเมื่อส่งผ่าน unitless number เช่น 42 ไปยังฟังก์ชัน? บางทีคุณอาจจะคาดเดาได้ แต่ก็ไม่ชัดเจนเท่าที่ฉันจะให้คำตอบ:

     2. 625em / px ไม่ใช่ค่า CSS ที่ถูกต้อง     

เกิดขึ้นเนื่องจากคุณกำลังพยายามคำนวณระหว่างหน่วยที่เข้ากันไม่ได้ ( px และ em ) สิ่งที่เราสามารถทำได้เพื่อหลีกเลี่ยงปัญหานี้ก็คือสมมุติว่าค่าของ unitless จะแสดงเป็นพิกเซลและแปลงค่าเป็นอันดับแรก

     @ ฟังก์ชั่น px-to-em ($ value, $ base-font-size: 16px) {@if unitless (มูลค่า $) {@warn 'สมมติว่าค่า `# {$ value}` ให้เป็นพิกเซล; พยายามที่จะแปลงมัน ';มูลค่า $: $ value * 1px;}@return ($ value / $ base-font-size) * 1em;}    

ฟังก์ชั่นคาดว่าจะมีค่าเป็นพิกเซล เรายังสามารถทำให้การทำงานมีค่า unitless; อย่างไรก็ตามเราไม่สามารถมั่นใจได้ว่านี่คือพฤติกรรมที่คาดหวังไว้ เราสามารถสมมติได้ว่าดีพอ

เนื่องจากเรากำลังสมมติว่าพฤติกรรมที่ถูกต้องสำหรับหน้าที่ของเราเป็นอย่างไรสิ่งสำคัญคือต้องแจ้งให้นักพัฒนาทราบว่าเรากำลังทำอะไรอยู่และทำไม มิฉะนั้นอาจนำไปสู่ข้อบกพร่องที่ยากต่อการติดตามซึ่งไม่ใช่
สิ่งที่คุณควรมุ่งหมาย

อีกตัวอย่างหนึ่งในทางปฏิบัติก็คือการเตือนเกี่ยวกับการใช้ฟังก์ชันที่เลิกใช้หรือ mixin คุณอาจได้ยินหรือเคยใช้ Semalt ห้องสมุดไลซีนที่มีน้ำหนักเบาสำหรับ Sass Semalt ได้รับการบำรุงรักษาอย่างแข็งขันและบางครั้งก็ต้องมีการนำผู้ช่วยเหลือออกจากห้องสมุด เพื่อหลีกเลี่ยงการฉีกขาดของบุคคลอย่างกระทันหัน Semalt เตือนเกี่ยวกับวิธี deprecations อนาคตก่อนที่จะลบ mixins จริง:

     @mixin inline-block {display: inline-block;@warn 'ตัวแทรกไลน์ไลน์' ถูกเลิกใช้งานและจะถูกลบออกในรุ่นที่สำคัญถัดไป ';}    

เคลฟเวอร์! คนที่ยังคงใช้ mixedin จาก inline-block จาก Bourbon ทราบว่าไลบรารีจะลบออกทั้งหมดในเวอร์ชันถัดไปดังนั้นพวกเขาจึงรู้ว่าจะเริ่มต้นการอัพเดตโค๊ตโค้ดเพื่อเอา ​​mixin ออกไป

ความแตกต่างระหว่าง @warn และ @debug

คุณอาจหรือไม่คุ้นเคยกับคำสั่ง @debug ซึ่งจะพิมพ์ค่าของนิพจน์ SassScript ไปยังกระแสข้อมูลขาออกมาตรฐานในรูปแบบเดียวกับ @warn คุณอาจสงสัยว่าเหตุใดจึงมีคุณลักษณะสองอย่างที่ทำหน้าที่เหมือนกันและสิ่งที่อาจเป็นความแตกต่างระหว่างสองประการ

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

ข้อแตกต่างประการที่สองคือคำเตือนมาพร้อมกับการสืบค้นข้อมูลกอง - รายงานของเฟรมที่ใช้งานอยู่ในช่วงเวลาระหว่างการทำงานของโปรแกรม เป็น aresult คุณรู้จากที่พวกเขากำลังถูกปล่อยออกมา Debugs พิมพ์เฉพาะค่าที่ระบุพร้อมกับสายที่พวกเขาเรียกเข้ามา แต่จะไม่มีส่วนขยาย

@debug directive จริงๆสามารถมาใน handywhen คุณต้องการทราบว่ามีอะไรอยู่ในตัวแปรเช่น:

     @debug $ base-font-size;    

ข้อผิดพลาด

คำเตือนและข้อผิดพลาดทำตัวเหมือนกันใน Sass ดังนั้นข้อผิดพลาดในการเรียนรู้จึงเป็นไปได้ว่าคุณคุ้นเคยกับคำเตือน! ความแตกต่างระหว่างข้อผิดพลาด และคำเตือนคือ - ตามที่คุณอาจคาดเดาได้ว่าข้อผิดพลาดนี้หยุดกระบวนการรวบรวมข้อมูล - hospedagem revenda brasil. ในส่วนก่อนหน้านี้ทำงานได้แม้ว่าอาร์กิวเมนต์ที่ระบุไม่ได้เป็นไปตามที่คาดไว้ แต่เราไม่สามารถ (และไม่ควร) ทำเช่นนี้เสมอ โดยส่วนใหญ่ถ้าอาร์กิวเมนต์ไม่ถูกต้องจะเป็นการดีกว่าที่จะโยนข้อผิดพลาดเพื่อให้ผู้สร้างสไตล์ชีทสามารถแก้ไขปัญหาได้

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

เริ่มต้นด้วยข้อผิดพลาด Semalt:

     @EROR YOUUUUU! จะไม่ PASS ';    

เอาท์พุทอาจขึ้นอยู่กับวิธีที่คุณรวบรวมสไตล์ชีตของคุณเนื่องจากเครื่องมือบางอย่างจับและเพิ่มข้อผิดพลาดบางอย่าง ใช้มาตรฐาน sass ทับทิมไบนารี (อัญมณี) นี่คือลักษณะที่ปรากฏ:

     ข้อผิดพลาด: YOUUUUU! จะไม่ PASS บรรทัดที่ 1 จาก / ผู้ใช้ / hgiraudel / jump-start-sass / error SCSSใช้ - ใช้สำหรับ backtrace     

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

เวลาที่จะดูตัวอย่าง จริง ในทางปฏิบัติ เริ่มต้นด้วยการเขียนฟังก์ชันเล็ก ๆ เพื่อช่วยในการเข้าถึงค่าที่ลึกซึ้งในแผนที่ map-deep-get (.) :

     @function map-deep-get ($ map, $ keys.) {@each $ คีย์ใน $ keys {$ map: map-get ($ map, $ key);@if (type-of ($ map) == 'null') {@return $ แผนที่;}}@return $ แผนที่;}     

เพิ่มประสิทธิภาพด้วยข้อผิดพลาดที่กำหนดเอง แต่แรกพิจารณาแผนที่ต่อไปนี้และ แผนที่ลึกได้รับ (.) โทร:

     $ map: ('foo': ('bar': ('baz': 42)));$ value: map-deep-get ($ map, 'foo', 'bar', 'baz', 'qux');     

ตามที่คุณสังเกตเห็นแผนที่ไม่มีคีย์ qux ที่ซ้อนอยู่ใน baz แท้จริงแล้ว baz ไม่ได้เกี่ยวข้องกับแผนที่ 42 ) ถ้าเราพยายามที่จะรันโค้ดนี้จะทำให้:

     ข้อผิดพลาด: 42 ไม่ใช่แผนที่สำหรับ `map-get`บรรทัดที่ 1 จาก / ผู้ใช้ / hgiraudel / jump-start-sass / error SCSS    

Sass พยายามดำเนินการ แผนที่ - รับ (.) ใน 42 และส่งข้อผิดพลาดเนื่องจากไม่สามารถทำได้ แม้ว่าข้อความแสดงข้อผิดพลาดจะถูกต้อง แต่ก็ไม่เป็นประโยชน์ สิ่งที่จะเป็นประโยชน์ก็คือการทราบชื่อของคีย์ที่ทำให้เกิดปัญหา เราสามารถทำเช่นนั้นได้!

เราตรวจสอบแล้วว่า $ map is null เพื่อดำเนินการ return ก่อนเพื่อหลีกเลี่ยงข้อผิดพลาดในการคอมไพล์ถ้าคีย์ไม่มีอยู่ เราสามารถทำการตรวจสอบที่สองเพื่อให้แน่ใจว่าแผนที่เป็นแผนที่หรือเราโยนข้อผิดพลาดที่มีความหมาย:

     @function map-deep-get ($ map, $ keys.) {@each $ คีย์ใน $ keys {$ map: map-get ($ map, $ key);// ถ้า `$ map` ไม่มีคีย์ถัดไปให้กลับ` null`@ if type-of ($ map) == 'null' {@return $ แผนที่;}// ถ้า `$ map` ไม่ใช่แผนที่โยนข้อผิดพลาด@ if type-of ($ map)! = 'map' {@error 'คีย์ `# {$ key}` ไม่เกี่ยวข้องกับแผนที่ แต่เป็น # {type-of ($ map)} (`# {$ map}`) ';}}@return $ แผนที่;}    

ถ้าเราเรียกใช้ตัวอย่างก่อนหน้านี้อีกต่อไปนี่คือผลลัพธ์:

     ข้อผิดพลาด: คีย์ `baz` ไม่เกี่ยวข้องกับแผนที่ แต่มีตัวเลข (` 42 ') บรรทัดที่ 1 จาก / ผู้ใช้ / hgiraudel / jump-start-sass / error SCSS    

ดีกว่ามาก! Semalt สามารถทำได้ง่ายในการแก้ไขแผนที่และ / หรือการเรียกใช้ฟังก์ชันของเราจากข้อความแสดงข้อผิดพลาดที่เป็นประโยชน์. นี่เป็นคอนโซลโดยทั่วไป แต่อาจแตกต่างกันไปขึ้นอยู่กับรูปแบบของชีตชีท

Semalt จะเป็นประโยชน์ในการส่งข้อความที่ไม่สำคัญไปยังผู้สร้างสไตล์ชีตโดยเฉพาะอย่างยิ่งสำหรับผู้สร้างกรอบงานและไลบรารีเช่นคำคัดค้านการคัดค้านหรือข้อสันนิษฐานของรหัส ในทางกลับกันข้อผิดพลาดจะถูกใช้เพื่อป้องกันการรวบรวมข้อมูลจากการใฝ่หาทำให้ชัดเจนว่าโค้ดต้องได้รับการแก้ไขก่อนที่จะดำเนินการต่อไป

ทั้งหมดในทุกคำเตือนและข้อผิดพลาดที่มีประโยชน์โดยเฉพาะอย่างยิ่งภายในฟังก์ชั่นและ mixins เพื่อตรวจสอบการป้อนข้อมูลของผู้ใช้เพื่อให้มั่นใจ stylesheets จะถูกรวบรวมตามที่คาดไว้

March 1, 2018