You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Create React App中正确访问Sass/Node-Sass嵌套别名的方法

问题解决:SCSS @use 命名空间无法嵌套访问的问题

问题原因

@use 引入的命名空间属于文件局部作用域,_Tokens.scss 里定义的 colors 命名空间仅能在该文件内部使用,不会被引入 _Tokens.scss 的 _Base.scss 继承或嵌套访问。你尝试的 tokens.colors.$primary-color 写法不符合SCSS规则,因此触发编译报错。

解决方案

以下两种常用修正方式,可根据需求选择:

方式1:用 @forward 转发变量(推荐)

修改 _Tokens.scss,使用 @forward 代替 @use,将 _Colors.scss 的变量暴露给后续引入 _Tokens.scss 的文件:

// _Tokens.scss
// 转发Colors文件的变量,可添加前缀避免命名冲突(可选)
@forward "./Colors" as colors-*;

此时 _Base.scss 中可这样访问变量:

// _Base.scss
@use "Styles/Tokens/Tokens" as tokens;

body {
  color: tokens.colors-primary-color;
}

若不需要前缀,直接转发即可:

// _Tokens.scss
@forward "./Colors";

对应 _Base.scss 写法:

// _Base.scss
@use "Styles/Tokens/Tokens" as tokens;

body {
  color: tokens.$primary-color;
}

方式2:在 _Tokens.scss 中显式导出变量

如果需要在 _Tokens.scss 中对变量做二次处理,可先 @use 引入,再导出变量:

// _Tokens.scss
@use "./Colors" as colors;

// 显式导出Colors中的变量
$primary-color: colors.$primary-color;

随后在 _Base.scss 中直接通过 tokens 命名空间访问:

// _Base.scss
@use "Styles/Tokens/Tokens" as tokens;

body {
  color: tokens.$primary-color;
}

内容的提问来源于stack exchange,提问作者Vince

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 23:55:23