Dart Sass 1.77+ 开始严格执行弃用策略,@import、全局内置函数调用、旧颜色函数被主动标记为 deprecated;警告是强制迁移起点,非偶然现象,下个 minor 版将直接报错中断构建。

不是升级“引发”警告,而是 Dart Sass 1.77+ 开始严格执行已写入路线图的弃用策略——@import、全局内置函数调用、旧颜色函数这三类语法被编译器主动标记为 deprecated,警告是强制迁移的起点,不是偶然现象。
为什么@import突然报错又还能编译?
你看到的警告(如 DEPRECATION WARNING: @import is deprecated)来自 Dart Sass 的兼容模式:它仍会把 @import 当作文本拼贴处理,但已拒绝将其纳入未来版本支持范围。这种“能跑但不许再写”的状态,本质是编译器在说:“下个 minor 版就直接中断构建”。
- 变量静默覆盖:
_vars.scss和_theme.scss都定义了$spacing?后@import的生效,调试时 DevTools 只显示最后位置,查不到来源 - 重复解析:一个
@import "mixins"在 5 个文件里出现 → Sass 解析它 5 次,热更新变慢、CSS 体积膨胀 - 路径不校验:
@use "src/styles/variables"✅,但@use "src/styles/_variables.scss"❌ ——@import不管这些,@use会直接编译失败
[global-builtin] 警告到底在报什么?
这类警告明确指向你仍在用旧式全局调用,比如直接写 lighten($c, 10%) 或 map-get($m, "key")。Dart Sass ≥1.23 已强制要求模块前缀,否则未来版本会报错而非警告。
- 必须改写为:
@use "sass:color"+color.lighten($c, 10%);@use "sass:map"+map.get($m, "key") -
/运算符也受影响:写$px / $rem会触发Using / for division警告,得改用@use "sass:math"+math.div($px, $rem) - 第三方库(如 uview-plus)若内部还用全局函数,你改不了代码,只能等它发新版(主流库已在 2026 年上半年陆续适配)
旧颜色函数(如 fade-out()、adjust-color())为什么也报弃用?
这些函数不是“写法过时”,而是 Sass 官方已从语言层面移除支持:color.mix() 和 color.adjust() 压根不存在于 Dart Sass 中,你项目里能跑,只是因为旧版兼容层还在硬扛。
立即学习“前端免费学习笔记(深入)”;
-
fade-out($c, 0.2)→ 改用transparentize($c, 0.2)(语义更准确,方向一致) -
adjust-color($c, $lightness: 10%)→ 看意图:提亮就用lighten($c, 10%),不是无脑套change-color() -
mix($c1, $c2, 50%)仍可用,但别加color.前缀 ——color.mix()是非法调用,会直接报Undefined function
真正容易被忽略的是:这些警告不会自动消失,@warn 指令也扫不到它们。你必须手动全局搜索 fade-out(、adjust-color(、map-get(、lighten((注意括号匹配),逐个确认上下文再替换。路径、命名空间、分号缺一不可,错一个字符就会让 @use 失效,最终还是报 Undefined variable。


















