Sass:使用@use 和@forward 时的模块循环

Posted

技术标签:

【中文标题】Sass:使用@use 和@forward 时的模块循环【英文标题】:Sass: module loop when using @use and @forward 【发布时间】:2021-02-20 18:48:40 【问题描述】:

在我的style.scss 中,我正在使用以下方法加载一个 scss 文件:

@use "bootstrap/functions";

稍后在style.scss 中,我加载了另一个名为_variables.scss 的scss 文件。在这个文件中,我还想使用函数文件,例如:

$link-color:                functions.theme-color("primary") !default;
@include functions.assert-ascending($grid-breakpoints, "$grid-breakpoints");

问题是我收到以下错误:

SassError: Module loop: this module is already being loaded.
   ┌──> src/assets/scss/bootstrap/_variables.scss
4  │ @forward "functions";
   │ ^^^^^^^^^^^^^^^^^^^^ new load
   ╵
   ┌──> src/assets/scss/style.scss
22 │ @use "bootstrap/functions";
   │ ━━━━━━━━━━━━━━━━━━━━━━━━━━ original load
   ╵

我尝试使用@use@forward 加载它,我也尝试不加载它以查看它是否可以在当前上下文中找到它,但没有任何效果。我做错了什么?

我将 Webpack 与使用 dart-sasssass-loader 一起使用。

【问题讨论】:

你用过@import 吗? 我将所有内容改回导入。现在又可以工作了。 【参考方案1】:

我认为您遇到此问题的主要原因是您尝试加载两个相互依赖的文件; _functions.scss & _variables.scss,这是不可能的。要加载文件,它必须完全执行,当两者相互依赖时这是不可能的。两个文件之间只能有一个依赖项。

jacobScripts 在 sass GitHub 存储库中提出了类似的 issue。

【讨论】:

【参考方案2】:

我目前遇到了同样的问题,因为 @import 将在 2022 年 10 月贬值。

这是因为您有效地将引导程序/函数加载到您的 style.scss 中两次,一次作为自身,一次在 _variables.scss 内。

因为@use 不是全局的,就像@import 一样,它似乎会自动拒绝任何重复,抛出错误而不是忽略重复。

【讨论】:

以上是关于Sass:使用@use 和@forward 时的模块循环的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Webpack 上避免重复的 sass 导入(使用 @use)

预编译时的 Sass 未定义变量

sass-loader 无法理解@use with?

Sass / Vue:“@use 规则必须在任何其他规则之前编写”

Node-Sass 不会编译/转译 @use "module"

kubectl port-forward bind: address already in use unable