Sass SCS从@import切换到@use:undefined mixin

Sass SCS从@import切换到@use:undefined mixin,sass,undefined,scss-mixins,Sass,Undefined,Scss Mixins,多年来,我一直对@import非常满意,但有时,它们正在改变 因此,我尝试将我的项目从@import转移到@use和@forward,我发现非常有用。但是当我尝试在我的部分中实现@use时,我总是得到一个“未定义的mixin”。我想我可能误解了@use的工作方式,但我实在想不出哪里出了问题。我已经到了我只想爬下一座教堂的塔楼开始向人们开枪的地步。。。这也无助于我集中注意力;) 因此,我将其全部剥离为非常基本的代码块,以便在“实验室条件”下检查问题。以下是我得出的结论: 文件夹和文件: style

多年来,我一直对@import非常满意,但有时,它们正在改变

因此,我尝试将我的项目从@import转移到@use和@forward,我发现非常有用。但是当我尝试在我的部分中实现@use时,我总是得到一个“未定义的mixin”。我想我可能误解了@use的工作方式,但我实在想不出哪里出了问题。我已经到了我只想爬下一座教堂的塔楼开始向人们开枪的地步。。。这也无助于我集中注意力;)

因此,我将其全部剥离为非常基本的代码块,以便在“实验室条件”下检查问题。以下是我得出的结论:

文件夹和文件:

styles.scss
├── a_tools
│   └── _mixins.scss
├── b_settings
│   └── _global.scss
└── c-components
    └── _test.scss

_mixins.scss:

@use '../b_settings/global' as *;

@function bp($bp) {
  @return ($breakpoints, $bp);
}

@mixin vp-medium {
  @media (min-width: #{breakpoints(small) + 1}) and (max-width: #{breakpoints(medium)}) {
    @content;
  }
}

_gobal.scss:

$breakpoints: (
  'small':                                  767px,
  'medium':                                 1024px,
  'navigation':                             840px,
);

:root {
  --vp-name:                                small;
}

@include vp-medium {
  :root {
    --vp-name:                              medium;
  }
}

_test.scss:

@use 'a_tools/mixins' as *;
@use 'b_settings/global' as *;

.test {
  margin: 10px;

  @include vp-medium {
    margin: 20px;
  }
}

styles.scss:

@use 'c_components/test';
编译会不断在_global.scss的第1列第15行抛出“undefined mixin”,这是一行“@include vp medium{”。使用Dart Sass 1.32.8编译


谁能告诉我哪里走错了路?提前谢谢!

因为我理解新规则
@使用
的方式,你必须
@使用所需的文件,并将所需的混入到你想使用的每个文件中

如果我真的把它弄好了:

您在
test.scss
中使用了文件
mixin
vp medium

但是您没有在
global
中使用相同的文件,您也希望在其中使用mixin。只需尝试
@将该文件也使用到
global

其他:


我们在这里进行了类似的讨论:

Mate,这似乎是个问题!非常感谢!我必须让我的大脑思考这样一个事实,即你不能再构建“导入链”。就我个人而言,我一点也不喜欢这种新方法,它解决了我从未遇到的问题,并迫使我编写更多代码。但至少我终于让它工作起来了。再次感谢!)