@use能彻底避免变量静默覆盖,因其强制命名空间隔离(如dark.$bg和light.$bg互不干扰),访问必须加前缀,否则报错;而@import是无作用域文本拼接,后导入同名变量无提示覆盖前者。

为什么@use能彻底避免变量静默覆盖
@import本质是文本拼接,所有变量、混入、函数直接平铺进当前作用域——后导入的同名$bg会无提示覆盖前一个,你根本不知道值来自哪个文件。@use强制隔离:每个模块默认以文件名作命名空间,dark.$bg和light.$bg互不干扰,访问$bg不加前缀直接报错Undefined variable,逼你明确来源。
为什么@use路径写错就编译失败
@use只认下划线开头的 partial 文件(如_variables.scss),且路径必须精确匹配:
- 写
@use "variables"→ 正确,自动找_variables.scss - 写
@use "_variables"或@use "variables.scss"→ 报错No module with the name - 相对路径从当前文件算起,不是项目根目录;用 CLI 时需配
--load-path扩展查找范围
为什么@use不能直接引入normalize.css这类CSS文件
@use只解析 Sass 模块语法,遇到纯 CSS 开头(如/*)直接报错Invalid CSS after ""。正确做法是新建一个包装文件:
// _normalize-wrapper.scss @import "node_modules/normalize.css/normalize.css";
注意这个文件必须叫_normalize-wrapper.scss(带下划线),且里面不能写任何 Sass 逻辑(比如@use或变量),否则它就不再是“纯 CSS 包装层”。
为什么迁移时变量突然报错“Undefined variable”
把@import "colors"改成@use "colors"后,$primary立刻失效——这不是 bug,是设计使然。你必须显式加命名空间:colors.$primary。常见疏漏:
- 忘了改调用方式,还在用裸变量名
- 用了
@use "colors" as c,却写colors.$primary(命名空间已重命名为c) - 连字符变量如
$text-sm,误写成$textSm(Sass 不做驼峰转换)
最易被忽略的是:命名空间不是可选优化,而是硬性访问规则——没前缀,就不存在。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











