Tengo un problema extraño con el paquete mvc4 que no incluye archivos con 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 procesa, solo se procesa
<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é haciendo que ignore los archivos '.min.js'?
v
hash de parámetros agradable que se agrega a la URL y cambia cuando cambia el contenido del archivo)Respuestas:
La solución que publiqué originalmente es cuestionable (es un truco sucio). El comportamiento modificado ha cambiado en el paquete Microsoft.AspNet.Web.Optimization y el ajuste ya no funciona, como lo señalan muchos comentaristas. En este momento no puedo reproducir el problema en absoluto con la versión 1.1.3 del paquete.
Consulte las fuentes de System.Web.Optimization.BundleCollection (puede usar dotPeek, por ejemplo) para comprender mejor lo que está a punto de hacer. Lea también la respuesta de Max Shmelev .
Respuesta original :
Cambie el nombre de .min.js a .js o haga algo como
fuente
Microsoft implica el siguiente comportamiento (y prefiero seguirlo en mis proyectos):
version corta
Como resultado, tendrá automáticamente el script.js incluido en el modo DEBUG y script.min.js en el 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 DEBUG:
en LIBERACIÓN:
Nota
Y, por cierto, la única razón para tener un .min versiones de las secuencias de comandos en MVC4 es el caso cuando la versión minified no se puede procesar de forma automática. Por ejemplo, el siguiente código no se puede ofuscar automáticamente:
En todos los demás casos, puede utilizar solo una versión de depuración de su secuencia de comandos.
fuente
jquery.tmpl
) no tienen, no vienen con, no se descargaron la versión no mínima del archivo. El paquete ignora los archivos de script por completo si no tiene una versión no mínima en modo de depuraciónSi todo lo que tiene es una versión minificada de un archivo, la solución más simple que he encontrado es copiar el archivo minificado, eliminar .min del nombre del archivo copiado, luego hacer referencia al nombre del archivo no minificado en su paquete.
Por ejemplo, supongamos que compró un componente js y le dieron un archivo llamado some-lib-3.2.1.min.js. Para usar este archivo en un paquete, haga lo siguiente:
Copie some-lib-3.2.1.min.js y cambie el nombre del archivo copiado a some-lib-3.2.1.js. Incluya ambos archivos en su proyecto.
Haga referencia al archivo no minificado en su paquete, así:
El hecho de que el archivo sin 'min' en el nombre esté realmente minimizado no debería causar ningún problema (aparte del hecho de que es esencialmente ilegible). Solo se usa en modo de depuración y se escribe como un script separado. Cuando no está en modo de depuración, el archivo min precompilado debe incluirse en su paquete.
fuente
He encontrado una buena solución que funciona al menos en MVC5, solo puedes usarla en
Bundle
lugar deScriptBundle
. No tiene el comportamiento inteligente de loScriptBundle
que no nos gusta (ignorando .min, etc.) en este caso. En mi solución, usoBundle
para scripts de fiestas en 3D con archivos .min y .map y usoScriptBundle
para nuestro código. No he notado ningún inconveniente de hacerlo. Para que funcione de esta manera, deberá agregar el archivo original, por ejemplo, angular.js, y cargará angular.js en depuración y agrupará angular.min.js en modo de liberación.fuente
ScriptTable.EnableOptimizations = false
). Las rutas de guiones que contienen un patrón no se representan (p~/Scripts/thirdpartylib/*.js
. Ej .). Se hace el trabajo cuandoEnableOptimizations = true
, pero también lo haceScriptBundle
.System.Web.Optimizations
o del paquete nugetMicrosoft.Web.Optimizations
?.min.js
existe un archivo y el*.js
patrón no coincide con los archivos que terminan en.min.js
.Para renderizar
*.min.js
archivos, debe deshabilitarBundleTable.EnableOptimizations
, que es una configuración global que se aplica a todos los paquetes.Si desea habilitar optimizaciones solo para paquetes específicos, puede crear su propio
ScriptBundle
tipo que habilite temporalmente las optimizaciones al enumerar archivos en el paquete.Use en
OptimizedScriptBundle
lugar deScriptBundle
para paquetes cuyo archivo minificado siempre debe usarse, independientemente de si existe un archivo no minificado.Ejemplo de Kendo UI para ASP.NET MVC, que se distribuye como una colección de solo archivos minificados.
fuente
Para mi caso, estaba usando la biblioteca (¡maravillosa!) Knockout.js que viene como versiones Debug / Non:
Para que esto funcione, incluí "Knockout- {Version} .js" (sin depuración) en mi Bundle y obtuve el .debug. archivo js en modo de depuración.
fuente
Una manera fácil simplemente Cambie el nombre del archivo .min, por ejemplo, tiene abc.min.css que simplemente cambie el nombre de este archivo a abc_min.css y agréguelo a su paquete. Sé que no es la forma correcta de hacerlo, sino solo una solución temporal. Gracias y feliz codificación.
fuente
Bundler tiene muchos beneficios, consulte esta página PERO :
La plataforma MVC4 de Microsoft considera que tiene al menos una versión minimizada y una versión no minificada para cada Script o Style Bundle (también están disponibles otros archivos como Debug y vsdoc). Por lo tanto, tenemos problemas en situaciones en las que solo hay uno de estos archivos.
Puede cambiar el estado de depuración en el archivo web.config de forma permanente para manejar la salida:
Ver los cambios de salida! Se modificó el filtrado de archivos. Para cumplir con el propósito, debemos cambiar ignorar la filtración de casos que cambiará la lógica de la aplicación.
fuente
Amigos, simplemente lo mantendría simplemente hasta que Microsoft lo haga actuar juntos
Prueba esto
En RegisterBundles, cree este paquete para Kendo
En _Layout.cshtml pon esto:
De esta forma, obtenemos los mejores paquetes en producción y una referencia en depuración
Arreglalo cuando Microsoft arregle su código MVC 4
fuente