@use 是 Dart Sass 2.0+ 唯一可用的模块导入方式,彻底取代 @import;它强制要求下划线 partial 命名、精确路径、命名空间访问,且不支持直接导入纯 CSS 文件。

@use 不是“推荐替代”,而是唯一可用的模块导入方式——Dart Sass 2.0+ 已彻底移除 @import,写 @import 就会编译失败。
为什么 @use 写错路径就直接报错“No module with the name”
@use 只认以 _ 开头的 partial 文件(如 _variables.scss),且路径必须精确匹配文件系统:
-
@use "variables"✅ 自动匹配_variables.scss -
@use "_variables"❌ 报错No module with the name "_variables" -
@use "variables.scss"❌ 同样报错,不自动补扩展名 - 相对路径从当前文件算起,不是项目根目录;
@use "../theme/colors"表示上两级再进theme/colors.scss - 若文件实际在
src/scss/_colors.scss,而你在src/components/button.scss中写@use "colors",会失败——得写@use "../../scss/colors"或配--load-path=src/scss
为什么 @use 后所有变量/混入都报 “Undefined variable”
这不是 bug,是强制命名空间机制生效了。@use 默认不把任何东西注入全局作用域:
- 旧写法:
@import "colors"→ 可直接用$primary-color - 新写法:
@use "colors"→ 必须写colors.$primary-color - 用了
@use "colors" as c,却还写colors.$primary-color?会报错,前缀已变成c - 连字符变量如
$text-sm,不能写成$textSm—— Sass 不做驼峰转换 -
@use "colors" as *能解构导入,但仅限单个模块;多个as *会静默覆盖同名成员
为什么不能用 @use 直接引入 normalize.css 这类 CSS 文件
@use 只解析 Sass 模块语法,遇到纯 CSS 开头(如 /*)会立刻报错 Invalid CSS after "":
立即学习“前端免费学习笔记(深入)”;
- 正确做法:新建一个包装文件,命名为
_normalize-wrapper.scss(必须带下划线) - 内容只有一行:
@import "node_modules/normalize.css/normalize.css"; - 该包装文件里不能写任何 Sass 逻辑(比如变量、
@use、@mixin),否则可能触发解析失败 - 主文件中写:
@use "normalize-wrapper"或@use "normalize-wrapper" as * - 别写
@use "normalize.css"—— 这既不是合法模块名,也不符合 partial 命名规则
最容易被忽略的是:@use 的命名空间不是“可选优化”,而是硬性访问规则。没前缀,就不存在;路径错一位,就找不到;混用一行 @import,整个文件降级回 legacy 模式,所有命名空间消失。


















