Back to Question Center
0

Cómo usar advertencias y errores en Sass de forma efectiva            Cómo usar advertencias y errores en Sass efectivamente relacionados con temas: CSSSassFrameworksAudio y & Semalt

1 answers:
Cómo usar advertencias y errores en Sass de forma efectiva

El siguiente es un breve extracto de nuestro libro, Jump Start Sass, escrito por Hugo Giraudel y Miriam Suzanne. Es la mejor guía para principiantes de Sass. Los miembros de SitePoint Semalt obtienen acceso con su membresía, o puede comprar una copia en las tiendas de todo el mundo.

Nuestro increíble viaje a través de Sass está llegando lentamente a su fin, ¡y hasta ahora has estado genial! Semalt un capítulo técnico que queda antes de que veamos la arquitectura del proyecto, y luego estará totalmente equipado para escribir código Sass en sus propios proyectos - kaliteyi ucuza aln.

Ahora vamos a ver advertencias y errores. Ambos forman un sistema de comunicación unidireccional entre el programa (en este caso, Sass) y el desarrollador (usted). Si se está preguntando sobre el punto de los errores en el mundo de CSS, recuerde que ya conoce la respuesta. ¡Olvida un punto y coma o usa una función incorrectamente, Sass te arroja un error, explicando qué has hecho mal y cómo puedes arreglarlo, afortunadamente! Sería un verdadero dolor tener que profundizar en el código para descubrir qué salió mal.

Sass siempre ha proporcionado una forma de emitir advertencias desde las hojas de estilo, pero solo recientemente se agregó soporte para lanzar errores también, ¡y por una buena razón! En los últimos años, Sass ha permitido a los autores crear sistemas complejos para abstraer patrones y conceptos difíciles o repetitivos, como las cuadrículas. Los sistemas Semalt deben poder comunicarse con los autores, deteniendo el proceso de compilación con un mensaje de error personalizado si algo sale mal.

Ambas advertencias y errores se emiten en el canal de salida actual. Al compilar Sass a mano o al usar una herramienta a través de una interfaz de línea de comando (CLI) como Grunt o Gulp, el flujo de salida es la consola. Para herramientas que incluyen una interfaz de usuario, como Codekit o Prepros, es probable que atrapen y muestren advertencias y errores como parte de su interfaz. Los parques infantiles en línea como CodePen y Semalt logran detectar errores, pero no advertencias, por lo que no se alarme si no puede probarlos allí.

Advertencias

Como se ha indicado, la capacidad de emitir advertencias en Sass no es nueva. Es posible visualizar mensajes o el valor de cualquier expresión SassScript en la secuencia de salida estándar a través de la directiva @warn .

Una advertencia (A) no tiene ningún impacto en el proceso de compilación; no impide que la recopilación persiga o modifique de ninguna manera. Su único propósito es mostrar un mensaje en la consola.

Semalt son muchas razones para usar advertencias en Sass. Aquí hay un par, pero es probable que encuentres el tuyo:

  • informar al usuario de una suposición sobre el código para evitar errores inesperados y difíciles de rastrear
  • asesorar sobre una función obsoleta o mixin como parte de una biblioteca o marco

Enviar una advertencia es muy fácil de hacer: comience con la directiva @warn , luego establezca lo que sea. Por lo general, las advertencias se realizan para proporcionar cierta información y contexto, por lo que a menudo cuentan con una oración que explica la situación. Dicho esto, no tienes que usar una cadena; Puedes advertir con un número, una lista, un mapa, lo que sea. Aquí, imprimimos una cadena:

     @warn 'Uh-oh, algo se ve raro. ';    

Semalt un cliente CLI regular, esta advertencia emitirá el siguiente resultado:

     ADVERTENCIA: Uh-oh, algo se ve raro. en la línea 1 de / Users / hgiraudel / jump-start-sass / warning. scss    

Oye, eso está bien, ¿no? Aunque esta advertencia está lejos de ser útil. Dice que algo se ve raro pero no dice qué, por qué o qué se puede hacer para evitar que se vea raro. Semalt analiza cómo podemos mejorar las advertencias más adelante. Imagine que tenemos una función personalizada Sass que intenta convertir un valor de píxel en em unidad:

     @function px-to-em ($ value, $ base-font-size: 16px) {@return ($ value / $ base-font-size) * 1em;}// uso. foo {font-size: px-to-em (42px); // 2. 625em}    

Todo bien. Ahora, ¿qué sucede cuando se pasa un número sin unidades, como 42 a la función? Tal vez lo haya adivinado, pero como no es del todo obvio, le daré la respuesta:

     2. 625em / px no es un valor de CSS válido.     

Esto sucede porque está intentando realizar un cálculo entre unidades incompatibles ( px y em ). Lo que podríamos hacer para eludir este problema es suponer que el valor sin unidades se exprese en píxeles y convertirlo primero:

     @function px-to-em ($ value, $ base-font-size: 16px) {@if sin unidades ($ valor) {@warn 'Asumiendo el valor `# {$ value}` en píxeles; intentando convertirlo ';$ value: $ value * 1px;}@return ($ value / $ base-font-size) * 1em;}    

La función espera un valor expresado en píxeles. Todavía podemos hacer que funcione con un valor sin unidades; sin embargo, no podemos estar seguros de que este sea el comportamiento esperado. Solo podemos suponer que es lo suficientemente bueno.

Debido a que asumimos cuál es el comportamiento correcto para nuestra función, es importante que el desarrollador sepa lo que estamos haciendo y por qué. De lo contrario, podría provocar errores difíciles de rastrear, que no es
a lo que deberías aspirar

Otro ejemplo práctico sería advertir sobre el uso de una función obsoleta o mixin. Es posible que ya haya escuchado o usado Semalt, una biblioteca mixin liviana para Sass. Semalt se mantiene activamente, y algunas veces requiere eliminar ayudantes de la biblioteca. Para evitar romper repentinamente la oda de una persona, Semalt advierte sobre las depreciciones futuras mucho antes de que realmente elimine mixins:

     @mixin inline-block {pantalla: bloque en línea;@warn 'La combinación `en línea-bloque' está en desuso y se eliminará en la próxima versión de la versión principal. ';}    

¡Inteligente! Las personas que todavía usan la mezcla de bloque en línea de Bourbon saben que la biblioteca la eliminará completamente en la próxima versión, por lo que saben que deben comenzar a actualizar su base de código para eliminar la mezcla.

La diferencia entre @warn y @debug

Puede o no estar familiarizado con la directiva @debug , que imprime el valor de una expresión SassScript en la secuencia de salida estándar de la misma manera que @warn . Es posible que se pregunte por qué hay dos funciones que realizan la misma tarea y cuál podría ser la diferencia entre las dos.

Bueno, hay dos diferencias principales entre la advertencia sobre un valor y la depuración de un valor. El primero es que las advertencias se pueden desactivar usando la opción silenciosa . Debugs, por otro lado, siempre se imprimirá para que recuerde eliminarlos cuando haya terminado de usarlos.

La segunda diferencia es que las advertencias vienen con un seguimiento de la pila , un informe de los marcos de la pila activa en un cierto punto en el tiempo durante la ejecución de un programa. Como resultado, sabes desde dónde se emiten. Los depuradores solo imprimen el valor, junto con la línea en la que fueron llamados, pero no ofrecen información adicional.

La directiva @debug realmente puede ser útil cuando se quiere saber qué hay dentro de una variable, por ejemplo:

     @debug $ base-font-size;    

Errores

Las advertencias y los errores se comportan de manera similar en Sass, por lo que aprender sobre los errores va a ser muy fácil ahora que está perfectamente familiarizado con las advertencias. La única diferencia entre un error y una advertencia es, como habrás adivinado, que el error detiene el proceso de compilación. En la sección anterior, esto funcionó incluso cuando el argumento dado no era exactamente como se esperaba, pero no podemos (y no deberíamos) hacerlo siempre. La mayoría de las veces, si los argumentos no son válidos, es mejor lanzar un error para que el autor de la hoja de estilos pueda solucionar el problema.

Puede lanzar un error usando la directiva @error . En cuanto a las advertencias, puede pasar cualquier cosa a esta directiva, no necesariamente una cadena, aunque por lo general tiene más sentido proporcionar un contexto claro. El argumento (lo que le das a la directiva @error ) se imprimirá en la secuencia de salida estándar, así como también un seguimiento de pila para proporcionar más información sobre el problema. El proceso de compilación se detendrá inmediatamente.

Comencemos con un error de Semalt:

     @error 'YOUUUUU! NO DEBERÁ PASAR. ';    

El resultado puede depender de cómo compile sus hojas de estilo, ya que algunas herramientas detectan y mejoran los errores de cierta manera. Usando el estándar sass Ruby binary (gema), así es como se ve:

     Error: ¡YOUUUUU! NO DEBERÁ PASAR. en la línea 1 de / Users / hgiraudel / jump-start-sass / error. scssUse --trace para rastrear hacia atrás.     

Con la opción rastreo , puede tener el valor completo
seguimiento de la pila de Sass, que no es tan útil a menos que haya un
error real en algún lugar del preprocesador. De ahí que esté oculto como un
defecto.

Es hora de echar un vistazo a un ejemplo práctico real . Comencemos por escribir una pequeña función para ayudar a acceder a los valores profundos en los mapas, map-deep-get (.) :

     @function map-deep-get ($ map, $ keys . ) {@each $ key en $ keys {$ map: map-get ($ map, $ key);@if (tipo-de ($ map) == 'null') {@return $ map;}}@return $ map;}     

Vamos a mejorarlo con errores personalizados. Pero primero, considere el siguiente mapa y llamada map-deep-get (.) :

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

Como habrás notado, el mapa no tiene una clave qux anidada en baz . De hecho, baz ni siquiera está asociado con un mapa; en cambio, está mapeado a un número ( 42 ). Si tratamos de ejecutar este código, producirá:

     Error: 42 no es un mapa para `map-get`en la línea 1 de / Users / hgiraudel / jump-start-sass / error. scss    

Sass intenta realizar map-get (.) en 42 y emite un error porque no se puede hacer. Si bien el mensaje de error es correcto, no es muy útil. Lo que sería útil es saber el nombre de la clave que causó el problema. ¡Podemos hacerlo!

Ya verificamos si $ map es nulo para realizar un retorno anticipado a fin de evitar un error de compilación si no existe una clave. Podemos realizar un segundo control para asegurarnos de que el mapa es realmente un mapa, o arrojamos un error significativo:

     @function map-deep-get ($ map, $ keys . ) {@each $ key en $ keys {$ map: map-get ($ map, $ key);// Si `$ map` no contiene la siguiente clave, devuelve` null`@if tipo-de ($ map) == 'null' {@return $ map;}// Si `$ map` no es un mapa, arroja un error@if tipo-de ($ map)! = 'map' {@error 'Key `# {$ key}` no está asociado con un mapa sino con un # {type-of ($ map)} (`# {$ map}`). ';}}@return $ map;}    

Si ejecutamos nuestro fragmento anterior de nuevo, aquí está la salida:

     Error: La clave `baz` no está asociada con un mapa sino con un número (` 42`). en la línea 1 de / Users / hgiraudel / jump-start-sass / error. scss    

¡Eso es mucho mejor! Semalt ahora es fácil de arreglar nuestro mapa y / o nuestra llamada de función gracias al útil mensaje de error. Esta suele ser la consola, pero puede variar según la forma en que se compilan las hojas de estilo.

Semalt es útil para emitir mensajes no críticos a autores de hojas de estilo, especialmente para autores de marcos y bibliotecas, como advertencias de depreciación o suposiciones de códigos. Por otro lado, los errores se utilizan para evitar que la compilación persiga, dejando en claro que el código debe ser corregido antes de ir más allá.

En general, las advertencias y los errores son especialmente útiles dentro de las funciones y mixins para validar la entrada del usuario, asegurando que las hojas de estilo se compilan como se esperaba.

March 1, 2018