5

Attualmente sto lavorando a un progetto che utilizza la libreria ASP.NET Web Optimization (v 1.1.0-Beta1) in combinazione con l'estensione Bundle Transformer (v 1.7.3-Beta1 per core, 1.7.0-Beta1 per MENO) che viene utilizzato convertire LESS in CSS. In base ai percorsi di ricerca sul Web all'interno di CSS (e meno) sembra essere un problema comune, nella maggior parte dei casi si consiglia di modificare manualmente il CSS e farlo con esso. Tuttavia, a causa delle differenze tra il nostro ambiente di sviluppo e di produzione, e non con il proprietario di, il CSS interessato non è possibile.Qual è l'uso corretto di IItemTransform per correggere i percorsi nel bundle CSS con ASP.NET Web Optimization e BundleTransformer?

Due soluzioni sembrano esistere. Il primo è quello di sovrapporre la directory virtuale definita dal raggruppamento sulla directory effettiva che contiene il contenuto. Per me questa sembra una scelta scadente.

In secondo luogo, e il percorso che ho scelto, è quello di utilizzare un IItemTransform come CssRewriteUrlTransform (menzionato nella this post. Anche questa soluzione ha i suoi limitations. Come tale ho tentato di scrivere il mio ItemTransformer ma sembra che il risultati della sua esecuzione viene ignorato quando viene utilizzato nel modo seguente:

public static void RegisterBundles(BundleCollection bundles) 
{ 
    /* among other work pass in IItemTransformer to fix paths */ 
    var styleBundle = new StyleBundle("~/bundles/css/styles") 
     .Include(...) 
     .Include("~/Content/less/font-awesome.less", new RewriteUrlTransform()) 
     .Include(...); 

    styleBundle.Transforms.Add(new CssTransformer()); 
    styleBundle.Orderer = new NullOrderer(); 

    bundles.Add(styleBundle); 
} 

Attuazione IItemTransform:

public class RewriteUrlTransform : IItemTransform 
{ 
    public string Process(string includedVirtualPath, string input) 
    { 
     return (input manipulated with proper path replacing bad path) 
    } 
} 

a meno che io sono del tutto Misun Doveroso come va usato un IItemTransform, il che è del tutto possibile a causa della mancanza di documentazione, penserei che il ritorno del metodo Process sia il nuovo post processato CSS. Tuttavia, il ritorno sembra essere ignorato. L'input originale è sempre in uso, anche quando restituisco uno String.Empty(). Sto facendo qualcosa di sbagliato qui o è davvero un bug?

+0

Inoltre ho preso in considerazione [Casset] (http://getcassette.net/) e ho determinato che non è una buona soluzione per i miei bisogni in quanto non si presta alla creazione di più bundle e li richiede esplicitamente in momenti diversi durante il rendering della pagina. – rheone

+0

Hai sofferto per la mancanza di informazioni, ma ho risposto a questa domanda per via del titolo. Il punto è che ci sono alcuni problemi con la logica nello 'StyleBundle' originale quando si tratta di percorsi relativi nelle directory virtuali (e poche altre cose) e [ProperStyleBundle] (http://stackoverflow.com/a/27890912/551322) è quello che mi è venuto in mente. – nrodic

risposta

2

Se non lo si capisce correttamente, le trasformazioni di articolo vengono applicate a un articolo prima che vengano raggruppate insieme, quindi vengono eseguite le trasformazioni del pacchetto. Hai verificato che stia chiamando la tua trasformazione quando ti aspetti dal debugger?

+0

Sì, il trasformatore viene chiamato come verificato da un punto di interruzione nel debugger. – rheone

+1

L'ipotesi corrente è che il raggruppamento completo non avvenga durante il debug/dev/local ei risultati vengono ignorati, ma non possono essere verificati a causa dell'origine non ancora disponibile. – rheone

+3

Ah sì, dovresti specificare BundleTable.EnableOptimizations = true –

2

Il trasformatore di pacchetti supporta in modo nativo una trasformazione automatica dei percorsi relativi in ​​assoluto nel codice CSS. Ti sto dicendo come sviluppatore di questo prodotto.

+0

Sì, nella maggior parte dei casi questo è vero. Tuttavia, sto avendo problemi espliciti perché il percorso è errato a causa del fatto che le risorse MENO si trovano in un percorso diverso rispetto al CSS standard in dotazione. (css da less vuole trovare risorse in altri percorsi) e con l'uso di sottodomini. Da qui la mia trasformazione manuale del percorso. – rheone

+0

In [Bundle Transformer 1.7.7 Beta 1] (http://bundletransformer.codeplex.com/releases/view/106114) è stato aggiunto il supporto delle trasformazioni degli articoli. Per il normale funzionamento con le trasformazioni degli oggetti è necessario utilizzare la classe 'NullBuilder' come builder per impostazione predefinita oppure utilizzare le classi' CustomStyleBundle' e 'CustomScriptBundle'. –

+0

Nel caso in cui qualcun altro si stia chiedendo come utilizzare il supporto integrato per la trasformazione automatica dei percorsi relativi, vedere questo articolo: http://www.seankenny.me/blog/2013/09/04/404-with-relative- percorsi-e-il-web-ottimizzazione-framework / –