Back to Question Center
0

Làm thế nào để sử dụng cảnh báo và lỗi trong Sass hiệu quả            Làm thế nào để sử dụng cảnh báo và lỗi trong Sass hiệu quảRelated Chủ đề: CSSSassFrameworksAudio & Semalt

1 answers:
Làm thế nào để sử dụng cảnh báo và lỗi trong Sass hiệu quả
(số 8)

Sau đây là trích dẫn ngắn từ cuốn sách của chúng tôi, Jump Start Sass, do Hugo Giraudel và Miriam Suzanne viết. Đó là hướng dẫn người mới bắt đầu cuối cùng của Sass. Các thành viên SemPoint của SitePoint được tiếp cận với thành viên của họ, hoặc bạn có thể mua một bản sao trong các cửa hàng trên toàn thế giới - wild vegas casino.

Hành trình đáng kinh ngạc của chúng ta qua Sass đang dần dần kết thúc, và cho đến nay bạn đã làm rất tuyệt vời! Semalt một chương kỹ thuật còn lại trước khi chúng ta nhìn vào kiến ​​trúc dự án, và sau đó bạn sẽ được trang bị đầy đủ để viết mã Sass trong dự án của riêng bạn.

Bây giờ chúng ta sẽ xem xét các cảnh báo và lỗi. Cả hai đều tạo thành một hệ thống liên lạc một chiều giữa chương trình (trong trường hợp này, Sass) và nhà phát triển (bạn). Nếu bạn đang tự hỏi về điểm lỗi trong thế giới CSS, hãy nhớ rằng bạn đã biết câu trả lời. Semalt bạn quên một dấu chấm phẩy hoặc sử dụng một chức năng không chính xác, Sass ném một lỗi cho bạn, giải thích những gì bạn đã làm sai và làm thế nào bạn có thể khắc phục nó, thankfully! Nó sẽ là một nỗi đau thực sự phải đào sâu vào mã để tìm ra những gì đã sai.

Sass từ lâu đã cung cấp một cách để phát ra các cảnh báo từ bảng định kiểu, nhưng gần đây chỉ có thêm hỗ trợ để ném lỗi - và vì lý do tốt! Trong vài năm gần đây, Sass đã cho phép các tác giả xây dựng các hệ thống phức tạp để mô tả khó khăn hoặc lặp đi lặp lại các khái niệm, chẳng hạn như lưới. Các hệ thống Semalt phải có khả năng giao tiếp với tác giả, dừng quá trình biên dịch với một thông báo lỗi tùy chỉnh nếu có bất cứ điều gì sai.

Cả hai cảnh báo và lỗi đều được phát ra trong kênh đầu ra hiện tại. Khi biên dịch Sass bằng tay hoặc bằng cách sử dụng một công cụ thông qua giao diện dòng lệnh (CLI) như Grunt hoặc Gulp, dòng đầu ra là giao diện điều khiển. Đối với các công cụ bao gồm giao diện người dùng, chẳng hạn như Codekit hoặc Prepros, có thể họ bắt và hiển thị cảnh báo và lỗi như một phần của giao diện của họ. Sân chơi trực tuyến như CodePen và Semalt quản lý để bắt lỗi nhưng không cảnh báo, do đó, không được báo động nếu bạn không thể kiểm tra chúng trong đó.

Cảnh báo

Như đã nói, khả năng phát ra các cảnh báo trong Sass không phải là mới. Có thể hiển thị các thông điệp hoặc giá trị của bất kỳ biểu thức SassScript nào đến luồng đầu ra tiêu chuẩn thông qua chỉ thị @warn .

Cảnh báo A không ảnh hưởng đến quá trình xử lý; nó không ngăn cản việc biên soạn để theo đuổi hoặc thay đổi nó bằng bất cứ cách nào. Mục đích duy nhất của nó là để hiển thị một tin nhắn trong bảng điều khiển.

Semalt là rất nhiều lý do để sử dụng các cảnh báo trong Sass. Đây là một cặp vợ chồng, nhưng bạn có thể tìm thấy của riêng bạn:

  • thông báo cho người sử dụng một giả định về mã để tránh lỗi bất ngờ và khó theo dõi
  • tư vấn về một chức năng không được tán thành hoặc mixin như một phần của một thư viện hoặc khuôn khổ

Gửi một cảnh báo là chết đơn giản để làm: bắt đầu với @ warn chỉ thị, sau đó tiểu bang bất cứ điều gì nó được. Cảnh báo thường được thực hiện để cung cấp một số thông tin và bối cảnh, do đó, họ thường có một câu giải thích tình hình. Điều đó đang được nói, bạn không phải sử dụng một chuỗi; bạn có thể cảnh báo với một số, một danh sách, một bản đồ-bất cứ điều gì. Ở đây, chúng ta in một chuỗi:

     @warn 'Uh-oh, có vẻ kỳ lạ. ';    

Semient một khách hàng CLI thường xuyên, cảnh báo này sẽ phát ra đầu ra sau đây:

     CẢNH BÁO: Uh-oh, có vẻ kỳ lạ. trên dòng 1 của / Người dùng / hgiraudel / jump-start-sass / warning. scss    

Này, thật tuyệt, phải không? Mặc dù cảnh báo này còn xa mới có ích. Nó nói rằng một cái gì đó trông kỳ lạ nhưng không nói những gì, tại sao, hoặc những gì có thể được thực hiện để ngăn chặn nó trông kỳ lạ. Semalt thảo luận về cách chúng ta có thể cải thiện các cảnh báo trên. Hãy tưởng tượng chúng ta có một chức năng tùy chỉnh Sass mà cố gắng để chuyển đổi một giá trị pixel trong em đơn vị:

     @function px-to-em (giá trị $, $ base-font-size: 16px) {@return ($ value / $ base-font-size) * 1em;}// Sử dụng. foo {kích thước phông chữ: px-to-em (42px); // 2. 625em}    

Tất cả tốt. Bây giờ, điều gì sẽ xảy ra khi vượt qua một số không có đơn vị - chẳng hạn như 42 - vào chức năng? Có lẽ bạn đã đoán được, nhưng vì nó không khá rõ ràng tôi sẽ cho bạn câu trả lời:

     2. 625em / px không phải là giá trị CSS hợp lệ.     

Điều này xảy ra vì bạn đang cố gắng thực hiện tính toán giữa các đơn vị không tương thích ( px em ). Những gì chúng tôi có thể làm để phá vỡ vấn đề này là giả sử giá trị unitless được thể hiện bằng pixel và chuyển nó lần đầu tiên:

     @function px-to-em (giá trị $, $ base-font-size: 16px) {@ nếu đơn vị (giá trị $) {@warn 'Giả sử giá trị `# {$ value}` để được trong pixel; cố gắng chuyển đổi nó. ';giá trị $: $ giá trị * 1px;}@return ($ value / $ base-font-size) * 1em;}    

Chức năng này mong đợi một giá trị được biểu diễn bằng pixel. Chúng tôi vẫn có thể làm cho nó hoạt động với một giá trị vô cùng; tuy nhiên, chúng ta không thể chắc chắn rằng đây là hành vi mong đợi. Chúng ta chỉ có thể cho rằng nó đã đủ tốt.

Bởi vì chúng tôi giả định hành vi đúng cho chức năng của chúng tôi, điều quan trọng là để cho nhà phát triển biết bạn đang làm gì và tại sao. Nếu không, nó có thể dẫn đến những lỗi mà khó có thể theo dõi, mà không phải là
những gì bạn nên nhắm tới.

Một ví dụ thực tế khác là cảnh báo chống lại việc sử dụng một chức năng không được chấp thuận hoặc mixin. Bạn có thể đã nghe nói hoặc sử dụng Semalt, một thư viện mixin nhẹ cho Sass. Semalt được tích cực duy trì, và đôi khi đòi hỏi phải xoá bỏ người trợ giúp khỏi thư viện. Để tránh đột ngột phá vỡ lời ngợi ca của một người, Semalt cảnh báo về cách hủy bỏ trong tương lai trước khi nó thực sự loại bỏ hỗn hợp:

     @mixin nội tuyến khối {hiển thị: inline-block;@warn 'Bộ trộn `nội tuyến-block' không được dùng nữa và sẽ được gỡ bỏ trong bản phát hành phiên bản tiếp theo. ';}    

Khéo léo! Những người vẫn sử dụng inline-block mixin từ Bourbon đều biết rằng thư viện sẽ xóa nó hoàn toàn trong phiên bản tiếp theo, vì vậy họ biết để bắt đầu cập nhật codebase của họ để loại bỏ các mixin.

Sự khác biệt giữa @warn @debug

Bạn có thể hoặc có thể không quen thuộc với chỉ thị @debug , trong đó in giá trị của một biểu thức SassScript sang dòng đầu ra tiêu chuẩn tương tự như @warn . Bạn có thể tự hỏi tại sao có hai tính năng thực hiện cùng một nhiệm vụ, và những gì có thể là sự khác biệt giữa hai.

Vâng, có hai khác biệt lớn giữa cảnh báo về một giá trị và gỡ lỗi một giá trị. Đầu tiên là cảnh báo có thể được tắt bằng cách sử dụng tùy chọn yên tĩnh . Các lỗi, mặt khác, sẽ luôn được in để bạn nhớ xóa chúng khi bạn đã sử dụng chúng.

Sự khác biệt thứ hai là các cảnh báo đi kèm với dấu vết stack - báo cáo về các ngăn xếp hoạt động đang hoạt động tại một điểm nhất định trong thời gian thực thi một chương trình. Như aresult, bạn biết từ nơi họ đang được phát ra. Các lỗi chỉ in giá trị, cùng với đường mà chúng được gọi vào, nhưng chúng không cung cấp sự giãn nở.

@debug chỉ thị thực sự có thể đến trong khi bạn muốn biết những gì bên trong một biến, ví dụ:

     @debug $ base-font-size;    

Lỗi

Cảnh báo và lỗi tương đối giống nhau trong Sass, do đó, những lỗi về học tập sẽ rất nhẹ nhàng khi bạn hoàn toàn cảnh báo! Sự khác biệt duy nhất giữa lỗi và cảnh báo là-như bạn có thể đoán - rằng lỗi dừng quá trình biên dịch. Trong phần trước, điều này đã làm việc ngay cả khi đối số được đưa ra không chính xác như mong đợi, nhưng chúng ta không thể (và không nên) luôn làm điều này. Hầu hết thời gian, nếu đối số là không hợp lệ, tốt hơn là ném một lỗi để tác giả định kiểu có thể khắc phục được sự cố.

Bạn có thể ném một lỗi bằng cách sử dụng chỉ thị @error . Đối với cảnh báo, bạn có thể truyền bất cứ điều gì cho chỉ thị này - không nhất thiết là một chuỗi, mặc dù nó thường có ý nghĩa hơn để cung cấp một ngữ cảnh rõ ràng. Lập luận (bạn đưa ra chỉ thị @error ) sẽ được in ra trong luồng đầu ra tiêu chuẩn, cũng như dấu vết chồng chéo để cung cấp thêm thông tin chi tiết về vấn đề. Quá trình biên dịch sẽ dừng ngay lập tức.

Hãy bắt đầu với một lỗi Semalt:

     @EROR 'YOUUUUU! THÌ KHÔNG. VƯỢT QUA. ';    

Đầu ra có thể phụ thuộc vào cách bạn biên dịch stylesheets của bạn, như một số công cụ bắt và tăng cường các lỗi một cách nào đó. Sử dụng tiêu chuẩn sass Ruby nhị phân (gem), đây là cách nó trông:

     Lỗi: YOUUUUU! THÌ KHÔNG. VƯỢT QUA. trên dòng 1 của / Người dùng / hgiraudel / jump-start-sass / error. scssSử dụng --trace cho backtrace.     

Với tùy chọn trace , bạn có thể có đầy đủ
stack dấu vết từ Sass chính nó, mà không phải là hữu ích, trừ khi có một
lỗi thực tế ở đâu đó trong tiền xử lý. Do đó tại sao nó được giấu dưới dạng một
mặc định.

Thời gian để xem một ví dụ thực tế thực . Hãy bắt đầu bằng cách viết một hàm nhỏ để giúp truy cập các giá trị sâu sắc trong các bản đồ, map-deep :

     @chức năng bản đồ-sâu ($ map, $ keys . ) {@chơi $ key trong $ keys {$ map: map-get ($ map, $ key);@if (type-of ($ map) == 'null') {@return $ bản đồ;}}@return $ bản đồ;}     

Hãy nâng cao nó với các lỗi tuỳ chỉnh. Nhưng trước tiên, hãy xem xét bản đồ sau và bản đồ-sâu (. ) gọi:

     $ bản đồ: ('foo': ('quán ba': ('baz': 42)));$ value: map-deep-get ($ map, 'foo', 'bar', 'baz', 'qux');     

Như bạn đã biết, bản đồ không có phím qux được lồng vào baz . Thật vậy, baz thậm chí không liên quan đến bản đồ; thay vào đó, nó được ánh xạ tới một số ( 42 ). Nếu chúng ta cố gắng để thực hiện mã này, nó sẽ mang lại:

     Lỗi: 42 không phải là một bản đồ cho `map-get`trên dòng 1 của / Người dùng / hgiraudel / jump-start-sass / error. scss    

Sass cố gắng thực hiện bản đồ-nhận (.) trên 42 và phát ra một lỗi vì nó không thể được thực hiện. Trong khi thông báo lỗi là chính xác, nó không phải là rất hữu ích. Điều sẽ hữu ích là biết tên của khoá gây ra sự cố. Chúng ta có thể làm điều đó!

Chúng ta đã kiểm tra xem $ map null để thực hiện một sự trở lại sớm để tránh một lỗi biên dịch nếu một khoá không tồn tại. Chúng tôi có thể thực hiện kiểm tra thứ hai để đảm bảo rằng bản đồ thực sự là một bản đồ hoặc chúng tôi đưa ra một lỗi có ý nghĩa:

     @chức năng bản đồ-sâu ($ map, $ keys . ) {@chơi $ key trong $ keys {$ map: map-get ($ map, $ key);// Nếu `$ map` không chứa khóa tiếp theo, hãy trả về` null`@ if type-of ($ map) == 'null' {@return $ bản đồ;}// Nếu `$ map` không phải là bản đồ, hãy ném một lỗi@ if type-of ($ map)! = 'bản đồ' {@error 'Key `# {$ key}` không liên kết với bản đồ nhưng # {type-of ($ map)} (`# {$ map}`). ';}}@return $ bản đồ;}    

Nếu chúng ta chạy lại đoạn mã trước của chúng ta, đây là đầu ra:

     Lỗi: Khóa `baz` không liên kết với bản đồ nhưng một số (` 42 '). trên dòng 1 của / Người dùng / hgiraudel / jump-start-sass / error. scss    

Điều đó tốt hơn nhiều! Semalt bây giờ dễ dàng để sửa bản đồ của chúng tôi và / hoặc cuộc gọi chức năng của chúng tôi nhờ các thông báo lỗi hữu ích. Điều này thường là bàn điều khiển, nhưng nó có thể khác nhau tùy thuộc vào cách biên dịch một stylesheets.

Semalt hữu ích để phát ra các thông điệp không quan trọng cho các tác giả định kiểu - đặc biệt là đối với các tác giả khung và thư viện - chẳng hạn như cảnh báo phản đối hoặc các giả định mã. Mặt khác, các lỗi được sử dụng để ngăn việc thu thập thông tin từ việc theo đuổi, làm rõ rằng mã cần phải được sửa trước khi tiếp tục.

Tất cả trong tất cả, cảnh báo và lỗi đặc biệt hữu ích bên trong các chức năng và mixins để xác nhận người sử dụng đầu vào, đảm bảo stylesheets đang được biên dịch như mong đợi.

March 1, 2018