必须用 @use 替代 @import 并用 @forward 构建统一入口,否则变量覆盖、重复编译、调试失焦问题将指数级放大;@use 强制命名空间访问,旧代码中直接使用的 $primary-color 会报错,须写为 v.$primary-color,且禁止使用 as * 语法。

必须用 @use 替代所有 @import,再用 @forward 构建统一入口;不这么做,变量覆盖、重复编译、调试失焦问题会随项目规模指数级放大。
为什么直接把 @import 全局替换成 @use 会编译失败
因为 @use 强制命名空间访问,而旧代码里直接写 $primary-color 的地方全会报 Undefined variable。这不是路径问题,是作用域逻辑变了。
-
@use "variables" as v;后,必须写v.$primary-color,不能省略v. - 别用
@use "variables" as *;—— Dart Sass 5.0+ 已明确禁止该语法 - 所有
@use必须放在文件最顶部,前面不能有空行、注释或任何 CSS 规则 - 路径必须带引号,且不自动补
_或.scss(@use "variables"等价于@use "_variables.scss")
如何用 @forward 搭建安全的公共入口(如 _index.scss)
@forward 不是“导出”,而是“开门”——它只决定外部能看见什么,不把内容加载进当前文件。想在入口文件里自己用变量?还得补一句 @use。
- 入口文件(如
_index.scss)必须只做两件事:@use子模块 +@forward暴露成员,不能定义新变量或@mixin - 要支持
@use "index" as *和@use "index" as i;两种用法,得组合写:@use "core/variables" as core;<br>@use "utils/mixins" as utils;<br>@forward "core/variables" as core-*;<br>@forward "utils/mixins" as utils-*;
- 多个模块都含
$radius-sm?Sass 会直接报"$radius-sm" is already used。解决办法是用as btn-*和as card-*隔离前缀 -
@forward "colors" show $primary-color;只暴露指定成员;hide debug-log可屏蔽内部调试函数
哪些内容绝对不能放进 @forward 入口文件
入口文件一旦开始写样式规则或变量赋值,模块边界就失效了。这不是风格问题,是编译器机制决定的硬约束。
- 顶层 CSS 规则(如
.reset { margin: 0; })会被重复编译进每个引用它的文件,体积失控 - 本文件定义的
$tmp: 12px;不会被转发出去,外部永远访问不到 - 带下划线的私有成员(如
$_breakpoint-config)不该出现在@forward列表里,Sass 没强制私有,但这是约定底线 - 不要在
@forward中混用with改名和未声明依赖:比如改了$primary却没一并映射它依赖的$colors映射,函数调用仍会报Undefined function
最难的不是写对第一行 @use,而是让每个新增组件都严格走 _index.scss → @forward → 分层变量 → 命名空间访问 这条链路。松动一次,模块边界就从代码里消失,变成靠文档和人肉记忆维系的脆弱约定。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











