@forward默认不暴露任何内容,必须用as、show或with显式声明才能被外部访问;它只做“门禁”,不注入、不加载、不执行,且仅转发@use进来的成员,不转发本文件定义的内容。

导出失败几乎从不因为语法写错,而是转发规则没生效——@forward默认不暴露任何内容,必须用as、show或with显式声明才能被外部访问。
为什么@forward后变量还是undefined
根本不是路径或拼写问题,而是误以为@forward "colors"会让$primary-color自动出现在当前模块或使用者模块里。它不会注入、不加载、不执行,只做“门禁”:你得告诉 Sass “哪些能被看见”。
-
@forward "colors" as *;→ 外部@use "theme" as *;可直接用$primary-color -
@forward "colors" as color-*;→ 外部必须写color-primary-color - 如果
_theme.scss里自己定义了$spacing-md: 16px;,但只写了@forward "colors",那这个$spacing-md根本不会被转发出去——@forward默认只转发它@use进来的成员,不转发本文件定义的内容
多个@forward导致"name is already used"错误
这是编译器在阻止命名冲突,不是 bug。比如utils/spacing和components/card都转发了$radius-sm,Sass 就会报错,哪怕值一样。
- 典型触发场景:入口
index.scss同时@forward "utils/spacing"和@forward "components/card",而两者都含$radius-sm -
@forward "a" show $radius-sm;+@forward "b" show $radius-sm;也会冲突(漏重命名) - 解决只有两个办法:
— 统一由基础层(如core/vars)提供该变量,其他模块只引用不转发
— 用with显式改名:@forward "a" with ($radius-sm as $a-radius);+@forward "b" with ($radius-sm as $b-radius);
如何让工具包同时支持@use "kit"和@use "kit" as *
单靠一个@forward做不到。入口文件(如index.scss)必须组合@use + @forward,且自身不能定义任何新变量或 mixin。
- 正确写法:
@use "core/variables" as core;@use "utils/mixins" as utils;@forward "core/variables" as core-*;@forward "utils/mixins" as utils-*; - 这样使用者可选:
—@use "index" as i;→ 用i.core-primary-color
—@use "index" as *;→ 直接用$primary-color和@include text-truncate - 关键点:入口文件只是“中转站”,所有逻辑必须下沉到子模块;否则转发规则容易失控,比如你在
index.scss里加了一行$tmp: 12px;,它不会被自动转发,还会干扰依赖链
@forward路径和结构对齐最容易被忽略的细节
SCSS 不支持逻辑别名或目录级转发,@forward后面必须是真实存在的相对路径,且结尾不能带.scss或下划线。
- 错误:
@forward "core"(假设没有core/_index.scss)
正确:先建core/_index.scss,里面写@forward "vars"; @forward "mixins";,再在主入口写@forward "core/index"; - 路径必须严格匹配文件系统:
@forward "./mixins/_reset"✅,@forward "mixins/reset"❌ - VS Code 的 SCSS 插件可能无法跳转
@forward导出的内容——这是已知局限,不是你配错了;调试时建议临时删掉@forward,改用@use直连验证是否路径真实可达
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











