如何在包含Sass/SCSS文件之前向其提供配置变量?

如何在包含Sass/SCSS文件之前向其提供配置变量?,sass,Sass,从那时起,我正在将一个手写笔库迁移到SCSS,受影响的比例为0.3%。我遇到了一些我们正在做的事情,我不知道如何转换成SCS,也许这是不可能的 让我简单地说一下:我在几个项目上工作,这些项目都使用相同样式的负载,所以我们将这些样式放在一个样式表中,放在自己的NPM包中。然后我们就可以抓取@import'@company/design/styles'突然,我们在项目中获得了所有常规样式、变量和混合,或者我们可以导入@import'@company/package/styles/common'仅用于

从那时起,我正在将一个手写笔库迁移到SCSS,受影响的比例为0.3%。我遇到了一些我们正在做的事情,我不知道如何转换成SCS,也许这是不可能的

让我简单地说一下:我在几个项目上工作,这些项目都使用相同样式的负载,所以我们将这些样式放在一个样式表中,放在自己的NPM包中。然后我们就可以抓取
@import'@company/design/styles'
突然,我们在项目中获得了所有常规样式、变量和混合,或者我们可以导入
@import'@company/package/styles/common'仅用于变量和混合

问题是,在导入库之前,我们的项目可能需要配置库。假设库包含此位:

/@company/package/styles/\u forms.scss
输入:无效{
背景:url('/assets/input error.svg')不在中间偏右重复;
}
并非每个项目都会在该确切位置出现
/assets/input error.svg
。也许我的一个项目必须使用
/subfolder/static/input error.svg

我可以包括这个,然后覆盖
input:invalid{background image:url(…)}
,为它提供正确的位置,但是可能有很多对这个特定文件的引用,以及许多其他需要更正的资产。因此,我们在手写笔库中引入了一个
$asset input error
变量,该变量默认指向
/assets/input error.svg
,并执行了如下操作:

/@company/package/styles/\u forms.scss
输入:无效{
背景:url($asset input error)无重复右中;
}
//本地项目
$asset输入错误:'/subfolder/static/input error.svg';
@导入“@company/package/styles”;
上面的内容被大大简化了,实际上并不是合法的SCS,但我希望它传达了我们正在尝试做的事情:我们希望在SCS中设置有效的环境变量,包括通用样式表,并让它使用这些变量

问题是,我不确定在SCS中这样做的合法或惯用方法是什么。与具有全局变量作用域的手写笔不同,SCS将使用me
@use'../config'
和reference
config.$asset input error
,从库外部看不到更改配置以将该资源指向其他位置的方法。我肯定SCSS有办法让我做到这一点,但我不确定它是什么。我是否将整个库转换为一个巨大的mixin,并将可选配置传递给它?我是否对全局变量做了一些事情?还有别的吗

如何向我的SCSS样式表提供变量,以将其配置为将其包含在项目中的一部分?

最终,这里的最终目标只是能够对库说:“要引用的资产在这里”(非常重要)或“错误颜色在这个特殊项目中是这个”(不太重要)。

使用
@import
如您所述,您可以使用在
@import
之前声明的全局变量

@company/package/styles/\u forms.scss

$asset input error:'/subfolder/static/input error.svg'!违约
输入:无效{
背景:url($asset input error)无重复右中;
}
@company/package/styles/styles.scss

@导入“表单”;
local.scss

$asset input error:“/different/path/input error.svg”;
@导入“@company/package/styles”;

使用
@将[…]与
如果你想证明你的图书馆的未来,你也可以跳上
@use
列车

@company/package/styles/\u forms.scss

$asset input error:'/subfolder/static/input error.svg'!违约
输入:无效{
背景:url($asset input error)无重复右中;
}
@company/package/styles/styles.scss

@转发“表单”;
local.scss

@将“样式”与(
$asset input error:“/different/path/input error.svg”
);
遗憾的是,CodeSandbox和StackBlitz不支持dart sass,所以我没有这方面的实时演示,但我在npm最新版本的sass上进行了测试