Sass transformation: 每个文件预处理

Sass transformation: each file preprocessing

问题

我们正在为 SASS/SCSS 使用 System.Web.Optimization 捆绑和 BundleTransformer。是否可以在每个 sass 文件之前调用一些预处理?不仅在包含在包中的文件之前,而且在使用@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 文件37=].

还没有人回答,看来要构建 SASS 并不容易。

我们以其他方式解决了这个问题:停止在 IIS 中使用虚拟目录,并在每个项目中包含指向共享人员的符号链接。现在看起来每个项目都有自己的 /SharedStatic(它实际上是 Core Static 的符号链接)。这解决了 SCSS 的问题,因为我们可以在初始文件和编译前的文件中使用 '../../SharedStatic/',无需将路径从一个更改为另一个。