必须将@import替换为@use/@forward、全局函数调用加模块前缀、除法改用math.div(),否则dart sass 3.0.0发布后项目将编译失败;第三方库问题需等其升级或临时降级sass至1.62.1。

直接改掉 @import、全局函数调用和裸 / 除法,否则 Dart Sass 3.0.0 一发布,项目就编译失败。
@use 替代 @import 是硬性要求
旧写法 @import "@/assets/css/variables.scss" 会触发 [import] 警告,且 Dart Sass 3.0.0 将彻底移除支持。不能只靠静默警告糊弄过去。
- 最简迁移:用
@use "@/assets/css/variables.scss" as *替代,变量、混合器保持全局可访问,后续引用不用改 - 模块化推荐:去掉
as *,写成@use "@/assets/css/variables" as vars,再通过vars.$primary-color调用——避免命名冲突,尤其适合多人协作项目 -
@forward仅用于封装入口文件(比如统一导出 mixins + functions),它不转发变量,所以别指望用它暴露$color这类东西 - 第三方库(如
element-plus)报@import错误?别手动改node_modules;等它发新版,或临时锁定sass@1.62.1
全局函数必须加模块前缀
像 lighten($color, 10%)、map-get($map, "key")、nth($list, 1) 这类写法,现在会报 [global-builtin] 警告。Dart Sass 不再容忍“开箱即用”的函数调用。
- 必须显式
@use "sass:color"、@use "sass:map"、@use "sass:list"、@use "sass:math"等,再调用color.lighten()、map.get()、list.nth() - 常见映射:
round()→math.round(),str-index()→string.index(),type-of()→meta.type-of() - 第三方库内部用了
mix()或darken()?你没法改源码;降级sass是唯一现实选择(sass@1.62.1是最后一个支持全局函数的稳定版)
所有 / 除法必须换成 math.div()
100px / 4 或 $grid-columns / 2 这种写法,从 Dart Sass 2.0.0 起就会报错,不是警告——它真会中断编译。
- 一律替换为
math.div(100px, 4)、math.div($grid-columns, 2) - 参数类型必须一致:不能
math.div(10, 2px),否则运行时报错(单位不匹配) - Vite 的
additionalData注入全局变量时,也要检查注入内容里有没有裸/,否则照样炸
legacy-js-api 警告是构建工具配置问题
控制台出现 The legacy JS API is deprecated,不是你写的 SCSS 有问题,而是 Vite / Vue CLI 调用 Sass 的方式太老。
- Vite 用户优先在
vite.config.ts的css.preprocessorOptions.scss中加api: 'modern-compiler' - 如果加了
api还报,再补上silenceDeprecations: ['legacy-js-api'](注意是数组,字符串要加引号) - 这两个配置可以共存;但
api: 'legacy'已完全过时,别用
真正麻烦的不是语法改写,而是第三方库卡在旧模式不动——这时候降级 sass@1.62.1 不是偷懒,是给升级留出缓冲期。别等 CI 突然崩了才想起查这个。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











