在this topic的回答中展示了如何使用BundleTransformer为LESS和LessTranslator将变量传递给LESS文件。不幸的是在SASS类的BundleTransformer中没有属性GlobalVariables。是否可以使用自定义变量(颜色值)编译SASS文件取决于登录用户?
答案 0 :(得分:1)
我没有使用SASS扩展,所以我不能肯定地说,但你总是可以创建一个自定义包变换来替换本质上是一个'模板'文件。
所以你可以有一个SASS文件,变量声明如此
$variable: {{variable-placeholder}};
然后使用类似于以下的内容来替换值。
public class ReplacePlaceholdersBundleTransform : IBundleTransform
{
private readonly IDictionary<string, string> _replacements;
public ReplacePlaceholdersBundleTransform()
{
_replacements = new Dictionary<string, string>();
}
public ReplacePlaceholdersBundleTransform(IDictionary<string,string> replacements)
{
_replacements = replacements ?? new Dictionary<string,string>();
}
public void Process(BundleContext context, BundleResponse response)
{
if (_replacements.IsNullOrEmpty())
return;
foreach (var replacement in _replacements)
{
response.Content = response.Content.Replace(replacement.Key, replacement.Value);
}
}
}
要使用它,请将变换添加到捆绑包中。
yourBundle.Transforms.Add(
new ReplacePlaceholdersBundleTransform(new Dictionary<string, Func<BundleContext, string>>
{
{"{{variable-placeholder}}", "red"},
}));
我们使用了类似的脚本转换功能,在运行时将bundle url注入脚本文件,以获取Optimization框架生成的完整URL。如果在SASS转换发生后执行转换,这可能不适合你,但是,我没有时间启动SASS项目来测试它。
我希望这会有所帮助。
答案 1 :(得分:0)
解决“BundleTransformer.Less inject variables depending on context/request”讨论中描述的类似问题(仅适用于LESS)。即你还必须编写自己的缓存系统实现并使用InjectContentItemTransform
类(声明变量需要使用Sass语法)。但与LESS不同,您无法修改变量(仅可用于声明变量)。