Проблема
Мы используем связку System.Web.Optimization и BundleTransformer для SASS/SCSS. Можно ли вызвать некоторую предварительную обработку перед каждым файлом sass? Не только перед файлами, включенными в комплект, но и перед файлами, импортированными с помощью @import.
Если вы хотите выполнить некоторую предварительную обработку перед каждым файлом в пакете, вы можете добавить некоторый пользовательский IItemTransform или IBundleTransform, но представьте себе это:
Main.scss:
@import '_mixin';
some styles
_mixin.scss:
some mixins
Main.scss включен в комплект и будет предварительно обработан, а _mixin.scss не включен в комплект, поэтому компилятор scss получит необработанный файл с диска без какой-либо предварительной обработки.
Любой крючок в процессе компиляции? Или каким-то другим способом?
Зачем нам это нужно?
Наши общие статические файлы находятся в основном проекте. Этот статический проект основного проекта включается в другие проекты как виртуальный каталог в IIS (в отладке) или копируется (в выпуске). С помощью этого решения мы можем использовать «/SharedStatic/..» в любом проекте, и он всегда разрешается: как виртуальный каталог в отладке и как обычный путь в выпуске.
Итак, правильный @import для основного проекта должен быть таким (работает с BundleTransformer):
@import '~/SharedStatic/Styles/_mixin.scss'
Но VS intellisense (или R# intellisense) и WebEssentials intellisense не понимают импорт '~' во время компиляции. Intellisense понимает только это:
@import '../../../../CoreProject/Static/_mixin.scss'
Итак, идея состоит в том, чтобы предварительно обработать файлы scss при объединении и исправить импорт из '../../..' в '~/'.