Minificación y agrupación de ASP.net MVC: cómo minimizar un solo archivo JavaScript

Al tratar de cumplir con las pautas discretas de JavaScript, saqué todo el JavaScript de cada una de mis vistas y lo guardé en archivos .js separados.

Sin embargo, dentro de 1 vista, necesito crear dinámicamente algunas variables de JavaScript para que se inserten en ViewBag y se representen directamente en la vista:

    $(document).ready(function () {
        @(ViewBag.PrePop)
        @(ViewBag.PreDiscount)
    });

Esto funciona bien hasta que probé usando la nueva función de empaquetado y minificación de ASP.net.

Agrupar todos estos pequeños archivos JavaScript externos y luego llamar al script combinado desde cada página significa que cada página (aparte de la que contiene las variables emitidas por ViewBag) tiene un error de referencia de variable:

Uncaught ReferenceError: quotes is not defined 

Básicamente, esto significa que no puedo agrupar este archivo JavaScript en particular.

Sin embargo, me gustaría minimizarlo. Para hacer esto, simplemente declaro un paquete que solo contiene un archivo JavaScript:

bundles.Add(new ScriptBundle("~/bundles/mypagescript").Include(
            "~/Scripts/mypagescript.js"));

¿O hay otra forma de realizar únicamente la minificación?

preguntado el 12 de junio de 12 a las 22:06

2 Respuestas

Sí, actualmente no exponemos realmente ningún método para que pueda llamar fácilmente a Optimización solo para minimizar una cadena (podría hacerlo a través de una instancia de JsMinify.Process si realmente quisieras) es decir:

string js = "//I am a comment\r\nfoo = bar;\r\nfoo = yes;";
JsMinify jsmin = new JsMinify();
BundleContext context = new BundleContext();
BundleResponse response = new BundleResponse(js, null);
response.Content = js;
jsmin.Process(context, response);
Assert.AreEqual("foo=bar,foo=yes", response.Content);

Pero lo que sugieres es probablemente lo mejor (crear un paquete de un archivo).

Respondido 13 Jul 12, 22:07

Intenté esto, sin embargo, el constructor para System.Web.Optimization.BundleContext ahora es: public BundleContext (contexto HttpContextBase, colección BundleCollection, cadena bundleVirtualPath) - jason snelders

Disculpa por la respuesta tardía ;)

Puede usar Microsoft.Ajax.Utilities.Minifier. Cree una instancia y llame a MinifyJavaScript, que toma una cadena (el código JS) como parámetro y devuelve el código minimizado.

Dim minifier As New Microsoft.Ajax.Utilities.Minifier()
minifier.MinifyJavaScript(script)

A continuación, puede crear su propia acción o asistente HTML para llamar a esto. Esto funcionó bien en mi caso al menos;)

Respondido el 02 de enero de 14 a las 10:01

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.