[c#] Bundler no incluye archivos .min



Answers

Microsoft implica el siguiente comportamiento (y prefiero seguirlo en mis proyectos):

version corta

  1. Tiene versiones depuradas y minificadas de un script en su proyecto en la misma carpeta:
    • script.js
    • script.min.js
  2. Agrega solo script.js a un paquete en su código.

Como resultado, tendrá automáticamente script.js incluido en modo DEBUG y script.min.js en modo RELEASE .

Versión larga

También puede tener la versión .debug.js . En ese caso, el archivo se incluye en la siguiente prioridad en DEPURAR:

  1. script.debug.js
  2. script.js

en LIBERACIÓN:

  1. script.min.js
  2. script.js

Nota

Y, por cierto, la única razón para tener versiones .min de sus scripts en MVC4 es el caso cuando la versión minimizada no se puede procesar automáticamente. Por ejemplo, el siguiente código no puede ofuscarse automáticamente:

if (DEBUG) console.log("Debug message");

En todos los demás casos puede ir con solo una versión de depuración de su script.

Question

Tengo un problema extraño con el paquete mvc4 que no incluye archivos con la extensión .min.js

En mi clase BundleConfig, declaro

public static void RegisterBundles(BundleCollection bundles)
{
    bundles.Add(new ScriptBundle("~/Scripts/jquery")
        .Include("~/Scripts/jquery-1.8.0.js")
        .Include("~/Scripts/jquery.tmpl.min.js"));            
}

En mi opinión, declaro

<html>
    <head>
    @Scripts.Render("~/Scripts/jquery")
    </head><body>test</body>
</html>

Y cuando se renderiza, solo renderiza

<html>
    <head>
         <script src="/Scripts/jquery-1.8.0.js"></script>
    </head>
    <body>test</body>
</html>

Si cambio el nombre de jquery.tmpl.min.js a jquery.tmpl.js (y actualizo la ruta en el paquete en consecuencia), ambos scripts se representan correctamente.

¿Hay alguna configuración que esté causando que ignore los archivos '.min.js'?




Para mi caso, estaba usando la (maravillosa) biblioteca Knockout.js que viene como versiones Debug / Non:

"~/Scripts/knockout-{Version}.js"
"~/Scripts/knockout-{Version}.Debug.js"

Para que esto funcione, incluí "Knockout- {Version} .js" (sin depuración) en mi Bundle y obtuve el .debug. js archivo en modo de depuración.




He encontrado una buena solución que funciona al menos en MVC5, puedes usar Bundle lugar de ScriptBundle . No tiene el comportamiento inteligente de ScriptBundle que no nos gusta (ignorando .min, etc.) en este caso. En mi solución, uso Bundle para scripts de fiesta en 3D con archivos ScriptBundle y .map y uso ScriptBundle para nuestro código. No he notado ningún inconveniente de hacerlo. Para hacer que funcione de esta manera, necesitarás agregar el archivo original, por ejemplo angular.js, y cargará angular.js en la depuración y unirá angular.min.js en el modo de lanzamiento.




Bundler tiene muchos beneficios revisa esta página PERO :

La plataforma MVC4 de Microsoft. Considera que tiene al menos la versión minimizada y la versión no miniaturizada para cada paquete de scripts o estilos (también están disponibles otros archivos como Debug y vsdoc). Entonces tenemos problemas en situaciones que solo hay uno de estos archivos.

Puede cambiar el estado de depuración en el archivo web.config de forma permanente para gestionar el resultado:

<compilation debug="false" targetFramework="4.0" />

¡Vea los cambios de salida! Filtrado de archivos cambiado Para cumplir con el propósito, debemos cambiar ignorar la filtración de casos que cambiará la lógica de la aplicación.




Related