問題
SASS/SCSS には System.Web.Optimization バンドルと BundleTransformer を使用しています。各sassファイルの前に前処理を呼び出すことは可能ですか? バンドルに含まれるファイルの前だけでなく、@import を使用してインポートされるファイルの前にも。
バンドル内の各ファイルの前に前処理を行いたい場合は、カスタム IItemTransform または IBundleTransform を追加できますが、次のように想像してください。
Main.scss:
@import '_mixin';
some styles
_mixin.scss:
some mixins
Main.scss はバンドルに含まれており、前処理されますが、_mixin.scss はバンドルに含まれていないため、scss コンパイラは前処理なしでディスクから raw ファイルを取得します。
コンパイルプロセスへのフックはありますか? それとも他の方法ですか?
なぜ私たちはこれが必要なのですか?
共通の静的ファイルは Core プロジェクトにあります。このコア プロジェクト スタティックは、IIS の仮想ディレクトリとして (デバッグで)、またはコピーされて (リリースで) 他のプロジェクトに含まれます。このソリューションでは、任意のプロジェクトで「/SharedStatic/..」を使用でき、デバッグでは仮想ディレクトリとして、リリースでは通常のパスとして常に解決されます。
したがって、コア プロジェクトへの正しい @import は次のようにする必要があります (BundleTransformer で動作します)。
@import '~/SharedStatic/Styles/_mixin.scss'
しかし、VS インテリセンス (または R# インテリセンス) と WebEssentials インテリセンスは、コンパイル時に'~'インポートを認識しません。Intellisense は次のことだけを理解します。
@import '../../../../CoreProject/Static/_mixin.scss'
したがって、'../../ ..'から'~/'へのインポートをバンドルして修正しながら、scss ファイルを前処理することをお勧めします。