问题描述
我正在尝试根据环境切换sass导入URL。我已经审查了许多其他问题和答案,这一直困扰着我。 @import不允许使用动态字符串,因此我尝试根据环境变量对每个字符串和@ if / @ else使用mixin,但是我无法从其他sass文件访问根环境变量。
webpack.config.js
const scssRule = config.module.rules.find(rule => rule.test.test(".scss"));
const scssLoaderConfig = scssRule.use.find(({loader}) => loader === "sass-loader");
scssLoaderConfig.options = scssLoaderConfig.options || {};
scssLoaderConfig.options["implementation"] = require("sass"); //dart-sass
scssLoaderConfig.options["additionalData"] = `$env:"${env}";`; //Pass env to sass
theme.scss
//NOTE: This $env line is not actually in the file. It gets injected by webpack via sass-loader additionalData
$env: "preprod";
@forward "icons" as icon_*;
//More @forward directives such as colors
_icons.scss
@mixin importIconsPreprod {
@import "https://preprod.example.com/icons.css";
}
@mixin importIconsProd {
@import "https://example.com/icons.css";
}
@mixin importIcons() {
//SassError: Undefined variable.
@if $env == "preprod" {
@include importIconsPreprod;
} @else {
@include importIconsProd;
}
//More styles here
}
所需的实现
@use "theme-package" as theme;
//Import icons from theme.icon namespace
@include theme.icon_importIcons;
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)