问题
我们正在为 SASS/SCSS 使用 System.Web.Optimization 捆绑和 BundleTransformer。是否可以在每个 sass 文件之前调用一些预处理?不仅在 bundle 中包含的文件之前,而且在使用 @import 导入的文件之前。
如果您想在捆绑中的每个文件之前进行一些预处理,您可以添加一些自定义 IItemTransform 或 IBundleTransform,但想象一下:
Main.scss:
@import '_mixin';
some styles
_mixin.scss:
some mixins
Main.scss 包含在 bundle 中并将被预处理,但 _mixin.scss 不包含在 bundle 中,因此 scss 编译器将从磁盘获取原始文件而无需任何预处理。
编译过程中有任何挂钩吗?还是其他方式?
我们为什么需要这个?
我们常用的静态文件位于 Core 项目中。此核心项目静态包含在其他项目中作为 IIS 中的虚拟目录(在调试中)或复制(在发布中)。使用此解决方案,我们可以在任何项目中使用“/SharedStatic/..”,并且始终可以解决:作为调试中的虚拟目录和发布中的常规路径。
所以对核心项目的正确@import必须是这样的(与BundleTransformer一起使用):
@import '~/SharedStatic/Styles/_mixin.scss'
但是 VS intellisense(或 R# intellisense)和 WebEssentials intellisense在编译时不理解'~'导入。Intellisense 只理解这一点:
@import '../../../../CoreProject/Static/_mixin.scss'
所以想法是在捆绑和修复从'../../..'到'~/' 的导入时预处理 scss 文件。