sass 引入sass_Sass错误处理简介

sass 引入sass

无论使用哪种语言,都应以简洁明了的方式处理错误,无论是为了最终用户还是下一个开发人员。 当您在网站上执行不正确的操作时,它不应该只是给您打上错误代码或失败的命令。 它应该向您发出关于发生了什么的明确信息,向您发出警告。

为其他开发人员编码时,这应该没有什么不同。 当您建立一个库,一个框架或只是一个团队工作时,您不是唯一使用代码的人。 很有可能,许多背景迥异的开发人员可能不得不使用您的代码,而他们不必深入研究源代码和曲折的心态以了解正在发生的事情。

这就是为什么您应该正确处理错误的原因。 即使在萨斯。 即使编译为CSS一样宽容的东西。 每当构建自定义函数或mixin时 ,都应始终确保一切正常,而在并非如此的情况下,应采用不同的方法。

我不了解您,但我真的不喜欢让Sass编译器失败。 我宁愿有一条很酷的小消息向我解释,我忘记了一个论点而不是面对:

长话短说:正确处理错误。 我会告诉你如何。

检查什么?

确保指定了所有参数

构建函数时要做的第一件事就是确保指定了所有参数。 不幸的是,如果传递给它的参数数量不正确,Sass甚至不会输入该函数。 幸运的是,编译器使用如下消息以漂亮的方式处理它: Mixin my-awesome-mixin缺少参数$ the-awesome-argument。 所以还不错。

如果您不想让它交由编译器处理,而是希望自己处理,可以通过为函数/ ​​mixin中的所有参数指定默认参数来解决它。 最终用户不必每次都指定所有参数,这不仅更好,而且还允许您在所有情况下触发mixin /函数,并执行所需的操作。

确保论点有效

现在最重要的是确保所有参数均有效。 例如,如果您需要一种颜色,则必须确保开发人员实际上是在向函数传递颜色,而不是数字或字符串。 如果您需要三个值的列表,你应该检查长度,以确保有三个值,而不是两个或四个。

值得庆幸的是,Sass使用一堆默认函数(包括用于检查值的数据类型的type-of()使执行此操作变得非常容易。 顺便说一句, Sass 3.4甚至应该引入 is-type-of($value, $type)来解决()测试类型的问题,该类型总是返回list同时它也可以是map。

无论如何,即使为具有相当不错的Sass知识的开发人员编写代码时,也应注意函数的输入。

例如,当执行$value: $input + "px" ,基本上是在将数字(如果$input是一个数字,显然)转换为字符串。 然后,如果您尝试执行$value * 2 ,则Sass将抛出错误,因为您尝试将字符串相乘。 本文中有关此现象的更多信息。

...在功能上

使用自定义函数处理错误实际上很容易:检查需要检查的内容。 如果条件不匹配,则返回false (或null ,请参见下文),并在@warn Sass指令的帮助下警告用户。

@function add-10($number) {
  @if type-of($number) != "number" {
    @warn "`#{$number}` is not a number of `add-10`.";
    @return false;
  }

  @return $number + 10;
}

在这种情况下(我同意,这很愚蠢),如果$number参数不是数字,则该函数将返回false并且将通过在终端上显示一条消息来警告用户它们传递了错误的参数: `SWAG`是不是`add-10`的数字 。

如果参数有效,则仅返回数字+10。简单为饼形。

...在混合中

在处理mixin时,它稍微复杂一些,因为您实际上并没有返回任何东西。 相反,您转储CSS规则。 要变通解决此问题,您需要声明一个布尔值,该布尔值用作有效性检查器。 请考虑以下示例:

@mixin module($name) {
  // Initialize a validity checker boolean
  $everything-okay: true;

  // Check for argument validity
  @if type-of($name) != "string" {
    @warn "`#{$name}` is not a string for `module`.";
    $everything-okay: false;
  }

  // If everything's still okay, dump mixin content
  @if $everything-okay {
    @content;
  }
}

关于列表的一句话

如果要确保参数之一是其中包含多个项目的列表,则应始终测试长度而不是数据类型。 简而言之,Sass将所有值都视为单个元素列表,在某些情况下,您可以使用单个项目列表(实际上仍然是list来找到自己。

另一方面,检查length时一个潜在的问题是它也可以是map 。 确保绝对要面对多个值的列表的一种方法是这样做:

@if length($value) > 1 and type-of($value) != map {
  // It is a list of multiple values
}

什么时候检查太多?

如果我完全对你诚实,我会说永远不会。 您永远都不能太小心,可能会检查应用程序的任何函数和混入参数。 但是,这可能不是必需的。 对于参数检查,我有一条黄金法则: 如果该值可能会使Sass编译器崩溃,则应该检查它 。

这意味着,如果您有一个mixin接受直接用作CSS属性值的参数,那么我认为积极检查它们毫无意义。 最坏的情况是这些值将被转储到CSS输出中,从而导致无效CSS,浏览器将无法理解。 除了加载几个额外的字节外,不会有太大危害。

例如,考虑以下混合:

@mixin size($width, $height: $width) {
  width: $width;
  height: $height;
}

现在考虑以下用法:

.element {
  @include size(10, "string");
}

生成CSS将是:

.element {
  width: 10;
  height: "string";
}

任何浏览器都将拒绝两个属性,因为它们的值无效。 没什么大不了的。

处理深层嵌套函数中的错误

随着我们刚才看到的,你应该能够正确地处理可能出现的错误的99%,但是有它越来越难以跟上萨斯的情况:有错误从从一个函数调用的函数打交道时,从一个叫功能...

我在编写SassyJSON时遇到了这个问题, SassyJSON是用Sass编写的JSON解析器。 基本上,您将JSON字符串传递给json-decode函数,然后将其中_json-decode--value到_json-decode--value函数,然后再将其中_json-decode--*到_json-decode--*函数,具体取决于要解析的值的类型。 无论如何,对于我来说,嵌套三个,四个,甚至五个函数调用并不罕见。

不幸的是,在这种情况下,没有干净的方法来停止执行。 您必须通过手动检查每个级别的函数返回值来使错误上升到更高级别。 例如,如果您在最深层函数中有错误,则应将false返回给调用函数,然后调用函数应检查该值,意识到它为false ,因此将false返回给上层函数,依此类推,直到达到最高值为止然后停止执行。

处理起来很痛苦,但别无选择。 话虽这么说,如果您必须嵌套多个级别的函数,那么我会说您没有正确使用Sass。

发生错误时应返回什么

每当出现问题时,您都可以返回各种值,其中false和null是最受欢迎的值。 我想如果您来自JavaScript背景,则可以返回-1或void 0 。 我想您也可能会返回类似ERROR::{{ CODE }}尽管那样会使检查故障变得更加复杂。

我过去常常返回false因为这说明了事实:这是错误的。 但是,这可能是应该返回布尔值的函数的问题。 你怎么知道如果函数返回false ,因为结果已被评估为false ,或false ,因为出现了错误?

因此,您可以决定选择另一个值。 有一个有趣的事情null :用的值CSS属性null不会被编译到源。 基本上,这意味着如果您将Sass函数用作CSS属性的值并且出了点问题,Sass编译器将简单地忽略CSS属性。

我认为这样的事情实际上有点好:

.element {
  background: get-color-from-theme('admin');
}

如果get-color-from-theme函数的设计经过精心设计,则应确保存在admin主题并将其实际绑定到颜色值。 如果admin不存在,则该函数将返回null ,这将导致background: null 。 这将使Sass在将文件编译为CSS时忽略规则。

需要throw()函数

大多数语言都有throw函数或指令。 通常,此函数将错误消息或异常作为唯一参数接受,并且只要有错误,就停止脚本执行以显示此消息(在控制台中或其他内容)。 例如,在JavaScript中,您可以执行以下操作:

if (typeof myVariable === "undefined") {
  throw new userException("`myVariable` should be defined");
}

不幸的是,Sass没有这个。 基本上,Sass中绝对没有办法停止执行函数或mixin。 您可以构建一个,但是实际上并不能停止该函数,它只会返回false并记录一条消息。

@function throw($log) {
  @warn $log;
  @return false;
}

您可以使用throw()函数,而不是每次都手动编写@warn指令和@return false ,但是请记住它不会产生任何魔力,也不会阻止脚本运行。 它只是返回false并记录一条错误消息。

话虽这么说,已经向Sass维护者多次询问了throw指令,并且看来他们已经同意实施@error指令并不会很糟糕,该指令会根据问题#747中断当前范围的执行。 也许对于3.4,我不确定。

最后的想法

无论如何执行,都应始终检查函数和混合输入,而不要让编译器崩溃,因为它遇到了意外情况。 作为一名开发人员,我宁愿拥有一个干净的日志,什么也不输出,而不是一个巨大的堆栈跟踪,但是那又不是我。

作为一个实时示例,我建议您看看我前一段时间构建的一个小按钮库 。 核心mixin的大部分代码是参数检查和错误处理。 它使mixin看起来很拥挤,但是我认为这对于将要使用代码的开发人员至关重要。

最后,只要确保您想出适合您和您的团队的东西,就可以了。

翻译自: https://webdesign.tutsplus.com/tutorials/an-introduction-to-error-handling-in-sass--cms-19996

sass 引入sass

微信小程序地图开发避坑指南:腾讯地图API从配置到实战(附完整代码) 本文详细解析微信小程序中腾讯地图API的开发实践,从基础配置到高级功能实现,涵盖地图显示、地点搜索、路线规划等核心功能,并提供完整代码示例和常见问题解决方案,帮助开发者高效避坑。特别针对JavaScript SDK和map组件的使用进行了深度优化指导。 阅读详情

相关推荐

Decoder如何工作、Transformer如何训练、以及exposure bias问题

1、结合图文描述Decoder中各个模块是什么,以及是如何工作的。2、transformer是如何训练的。3、exposure bias问题造成的原因及解决方法

m0_59113542的博客 3345

uniapp在打包自定义基座的时候报错:SassError: Undefined variable: “$u-content-color“.

1.uniapp打包自定义基座报错:Undefined variable: “$u-content-color”. 2.解决办法 在上面的文件里面加入如下代码: @import "uview-ui/theme.scss"; @import "uview-ui/index.scss";

jsmylo的博客 1万+

AI全景之第八章第三节:时间序列分析与预测技术

摘要 时间序列分析与预测技术从传统统计模型发展到深度学习方法。传统方法包括ARIMA模型(处理趋势和季节性)、指数平滑(加权平均预测)和状态空间模型(概率框架分解)。机器学习方法通过特征工程和树模型提升非线性建模能力。深度学习方法中,RNN/LSTM处理序列依赖,TCN利用因果卷积,Transformer通过注意力机制捕获长程依赖。当前研究趋势结合神经符号方法和生成模型,以提高预测精度和可解释性。不同方法各具优势,需根据数据特性和预测需求选择。

技术引领业务创新 990

ng test 运行报错SassError: Can‘t find stylesheet to import, 导致case 一个都没有执行

问题解决 在angular.json 中test target中也配置和build target 一样的stylePreprocessorOptions.includePaths , 问题解决。 在调查此问题的时候发现很多回答需要配置karma.config.js 在里面加files 和 preprocessors ,从而引入样式文件和预处理引擎,此种都是不必要的。 问题描述 ng start, ng build 项目都可以正常运行,但是执行ng test 就会报错,从而导致case不运行,报错信息如下:

zsy_1991的博客 1万+

深入解析CAN2.0A与CAN2.0B协议:帧格式与通信机制对比

本文深入对比了CAN2.0A与CAN2.0B协议的核心差异,重点解析了11位标准帧与29位扩展帧的帧格式、标识符长度及通信机制。文章阐述了CAN2.0B向下兼容的特性,并探讨了在汽车电子、工业控制等复杂网络中,如何根据项目需求、兼容性及实时性要求,在标准帧与扩展帧之间做出合理选择。

weixin_29163797的博客 394

LabView实现modbus通讯

labview实现modbus通讯

Lrj的博客 7663

运行前端,执行npm run dev命令时报错时: Can‘t find stylesheet to import

运行前端,执行npm run dev命令时报错时: Can’t find stylesheet to import @import “~element-ui/packages/theme-chalk/src/index”。 解决方法:找到npm run dev命令时cd的文件夹里面,删除node_moudle文件夹,然后输入重新安装命令:npm install,回车,然后执行npm run dev,亲测可用 参这个链接:https://blog.csdn.net/D493829844/article/det

qq_43207709的博客 6408

ros入门(八)---TF坐标转换

TF(TransForm),就是坐标转换,包括了位置和姿态两个方面的变换。

weixin_51157015的博客 3388

Syntax Error: SassError: Can’t find stylesheet to import.报错( 已解决)

在跟写黑马《iHRM人力资源后台管理》p9时遇到此问题。

y7894563258的博客 4657

AI编码规则:从提示工程到自动化,提升大模型生成代码质量

在软件工程领域,代码质量是保障软件可维护性、安全性和团队协作效率的核心。其背后遵循着从基础语法规范到架构设计原则的一系列工程实践。随着大语言模型(LLM)在代码生成任务中的广泛应用,如何确保AI生成的代码符合这些工程标准,成为一个关键的技术挑战。这涉及到将人类工程师积累的最佳实践,转化为机器可理解、可执行的明确约束。通过系统化的**编码规则**定义与集成,例如构建涵盖安全、风格、架构的多层次规则集,并将其融入**提示工程**或自动化工作流,可以显著引导AI产出更健壮、规范的代码。这种方法的价值在于,它能将模

weixin_42525189的博客 642

编程实践:寒武纪-LLM&VLM模型量化&部署

本文介绍了在MLU370-S4平台上对大模型(LLM/VLM)进行量化的两种方法:SmoothQuant和WeightOnly。以Qwen2-VL-2B模型为例,详细说明了两种量化方式的命令行参数配置,包括必须设置的per_channel选项和量化参数调整建议。量化完成后,提供了模型部署的具体命令示例,包含设备分配、端口设置、并行度等关键参数。文章强调在MLU370芯片上需要手动设置block_size,并指出两种量化方式只能二选一使用。配套资料已上传至百度网盘供参考。

微风❤水墨 507

SassError: Undefined variable: “$u-border-color“问题解决

才正常解决了上述的问题。具体解决方案如下所示。尝试了下面这篇博客的方法。

qq_45366264的博客 7463

Python爬虫逆向案例:某云片滑块验证码分析-滑动验证码

今天我们看个滑块。

2201_76125393的博客 1034

sass 引入sass_您需要了解的有关Sass插值的所有信息

因此,您会不时与Sass一起玩。 您可以开始享受它了,因为它可以满足您的大多数需求。 但是,您还没有完全了解这件事: 插值 -将值插入其他值。 好吧,您很幸运,因为今天我将阐明这件事。 Interpo ...什么? 插值 (通常称为变量插值或变量替换 )并非Sass独有。 实际上,您可以使用多种语言(PHP,Perl,Ruby,Tcl,Groovy,Unix shell等)找到它。 我们经...

Web design 教程小屋 284

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

从node-sass迁移到Dart Sass完整指南

从node-sass迁移到Dart Sass完整指南 【免费下载链接】node-sass :rainbow: Node.js bindings to libsass 项目地址: https://gitcode.com/gh_mir...

gitblog_00470的博客 1255

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

sass-loader 错误处理与调试:解决常见编译问题的完整方案

在前端开发中,使用 sass-loader 编译 Sass/SCSS 代码时遇到错误是常见现象。本文将提供一套完整的解决方案,帮助开发者快速定位和解决 sass-loader 编译过程中的各类问题,提升开发效率。 ## 一、理解 sass-loader 的错误输出机制 当 sass-loader 编译 Sass/SCSS 文件时,会将编译错误信息传递给 webpack。这些错误信息通常包含以下

gitblog_00237的博客 436

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

sass遍历map空值_Sass Map简介:用法和示例

对于可伸缩的前端,Sass Maps是一件幸事。 从模块的逻辑中提取配置是一种很好的结构化方法。 让我向您解释为什么我认为Sass Maps是Sass 3.3中的最佳功能。 萨斯3.3 Sass 3.3已经存在了一段时间,每个人都可以接触到它,但是许多开发人员仍然不熟悉它的许多实际功能。 Sass的新版本为我们带来了一个名为map的新数据类型。 映射包含键/值对的集合,并帮助我们为简化的...

Web design 教程小屋 1153

vue vite sass 报错处理 Sass @import rules are deprecated and will be removed in Dart Sass 3.0.0

api: ‘modern-compiler’, // 修改api调用方式。sass 1.80 全局变量和 mixin 需要手动导出。sass 1.80 不再支持老的 js api 接口。sass 1.80 不再支持全局内置函数。, // 导出全局变量和 mixin。sass 1.80 不再支持。需要使用 `@use’

m0_74823561的博客 5043

node-sass-magic-importer 项目推荐

node-sass-magic-importer 项目推荐 项目基础介绍和主要编程语言 node-sass-magic-importer 是一个用于增强 Sass @import 语句的工具。该项目由多个 node-sass 自定义导入器组成,使得 Sass @import 语句能够实现许多高级功能。项目主要使用 TypeScript 和 SCSS 进行开发,TypeScript 占比约为 92....

gitblog_00798的博客 884

Sass Loader 项目推荐:现代化 Webpack Sass 编译解决方案

在前端开发中,Sass(Syntactically Awesome Style Sheets)作为最流行的 CSS 预处理器,能够显著提升样式开发效率。然而,将 Sass 集成到现代构建工具 Webpack 中却常常遇到以下挑战: - **编译性能问题**:大型项目编译缓慢 - **源映射(Source Map)配置复杂**:调试困难 - **依赖管理混乱**:多种 Sass 实现选择困难 - ...

gitblog_07923的博客 517

Node-sass开发环境终极配置:打造高效工作流的完整指南

想要快速搭建Node-sass开发环境并实现高效工作流吗?作为Node.js与LibSass的绑定库,Node-sass能够让你以惊人的速度将.scss文件编译为CSS。本指南将为你提供从零开始的完整配置方案,助你轻松掌握这一强大的Sass预处理器工具。 ## 🚀 快速安装与配置 首先,让我们从基础安装开始。Node-sass支持多种安装方式,确保你选择最适合自己环境的方法。 **一键安装

gitblog_01197的博客 1048

Sass-extract: 提取 Sass 文件中的结构化变量

Sass-extract: 提取 Sass 文件中的结构化变量 1. 项目基础介绍及编程语言 sass-extract 是一个开源项目,旨在从 Sass 文件中提取结构化的变量。该项目主要使用 JavaScript 编程语言开发,它能够帮助开发者轻松地从 Sass 文件中获取全局和局部变量,并在 JavaScript 中使用这些变量,比如用于无法仅通过 CSS 进行样式化的复杂数字可视化或其他动态...

gitblog_00016的博客 451

node-sass-middleware:强大的Sass编译中间件

node-sass-middleware:强大的Sass编译中间件 1. 项目基础介绍 node-sass-middleware 是一个基于 Node.js 的中间件,用于在 Connect/Express 服务器中自动编译 Sass/SCSS 文件为 CSS。该项目主要由 JavaScript 语言编写,旨在为 Node.js 环境提供便捷的样式预处理功能。 2. 核心功能 该项目的核心功能包括...

gitblog_00765的博客 301

Jekyll Sass Converter:优雅地将Sass转换为CSS

Jekyll Sass Converter:优雅地将Sass转换为CSS 项目基础介绍及编程语言 Jekyll Sass Converter是一款专为Jekyll静态站点生成器设计的开源工具,它利用Sass(以及SCSS)的强大能力来增强网站的样式表现。这个项目采用Ruby作为其主要编程语言,使得与Jekyll的集成变得自然而流畅。通过此工具,开发者能够无缝地在他们的Jekyll项目中编译Sass...

gitblog_01176的博客 851

SASS学习——SASS的安装及使用

一.什么是SASS SASS是一种CSS的开发工具,相比于非编程语言CSS而言,它更好书写,简单便捷,节省了设计者的时间。SASS作为“CSS预处理器”的基本思想是用一种专门的编程语言进行网页样式设计,再编译成CSS文件。二.SASS与SCSS SCSS 是 SASS 3 引入新的语法,其语法完全兼容 CSS3,并且继承了 SASS 的强大功能。也就是说,任何标准的 CSS3 样式表都是具有相同

pleasecallme_522的博客 847

【亲测免费】 Sass.js 使用教程

Sass.js 是一个在浏览器中编译 SCSS 到 CSS 的便利 API,基于 emscripted libsass(版本 v3.6.2)。如果你需要在 Node.js 环境中运行 Sass,推荐使用 node-sass。Sass.js 和 node-sass 生成的结果相同。需要注意的是,最小化的 worker 文件大小为 4.5MB,即使经过 gzip 压缩后仍有 827KB。在 Node....

gitblog_00624的博客 537
上一篇: ::before圆角_快速提示:正确完成圆角
下一篇: css入门_CSS动画入门
daique1908
博客等级 码龄10年 29粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值