J'ai un problème étrange avec le bundle mvc4 n'incluant pas les fichiers avec l'extension .min.js
Dans ma classe BundleConfig, je déclare
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"));
}
À mon avis, je déclare
<html>
<head>
@Scripts.Render("~/Scripts/jquery")
</head><body>test</body>
</html>
Et quand ça rend, ça ne fait que rendre
<html>
<head>
<script src="/Scripts/jquery-1.8.0.js"></script>
</head>
<body>test</body>
</html>
Si je renomme jquery.tmpl.min.js en jquery.tmpl.js (et que je mets à jour le chemin d'accès dans le bundle en conséquence), les deux scripts sont rendus correctement.
Y a-t-il un paramètre de configuration qui fait qu'il ignore les fichiers «.min.js»?
v
hachage de paramètre qui est ajouté à l'URL et change lorsque le contenu du fichier change)Réponses:
La solution que j'ai publiée à l'origine est discutable (c'est un hack sale). Le comportement modifié a changé dans le package Microsoft.AspNet.Web.Optimization et le réglage ne fonctionne plus, comme l'ont souligné de nombreux commentateurs. Pour le moment, je ne peux pas du tout reproduire le problème avec la version 1.1.3 du package.
Veuillez consulter les sources de System.Web.Optimization.BundleCollection (vous pouvez utiliser dotPeek par exemple) pour une meilleure compréhension de ce que vous êtes sur le point de faire. Lisez également la réponse de Max Shmelev .
Réponse originale :
Renommez .min.js en .js ou faites quelque chose comme
la source
Microsoft implique le comportement suivant (et je préfère le suivre dans mes projets):
version courte
En conséquence, vous aurez automatiquement le script.js inclus en mode DEBUG et script.min.js en mode RELEASE .
version longue
Vous pouvez également avoir la version .debug.js . Dans ce cas, le fichier est inclus dans la priorité suivante dans DEBUG:
en version:
Remarque
Et d'ailleurs, la seule raison d'avoir une version .min de vos scripts dans MVC4 est le cas où la version minifiée ne peut pas être traitée automatiquement. Par exemple, le code suivant ne peut pas être masqué automatiquement:
Dans tous les autres cas, vous pouvez utiliser uniquement une version de débogage de votre script.
la source
jquery.tmpl
) n'ont pas, ne sont pas fournis, n'ont pas téléchargé la version non min du fichier. Le bundler ignore complètement les fichiers de script s'il n'a pas de version non min en mode débogageSi tout ce que vous avez est une version réduite d'un fichier, la solution la plus simple que j'ai trouvée consiste à copier le fichier réduit, à supprimer .min du nom du fichier copié, puis à référencer le nom de fichier non réduit dans votre ensemble.
Par exemple, supposons que vous ayez acheté un composant js et qu'ils vous aient donné un fichier appelé some-lib-3.2.1.min.js. Pour utiliser ce fichier dans un ensemble, procédez comme suit:
Copiez some-lib-3.2.1.min.js et renommez le fichier copié en some-lib-3.2.1.js. Incluez les deux fichiers dans votre projet.
Référencez le fichier non minifié dans votre bundle, comme ceci:
Tout simplement parce que le fichier sans «min» dans le nom est en fait minifié ne devrait pas poser de problème (à part le fait qu'il est essentiellement illisible). Il n'est utilisé qu'en mode débogage et est écrit en tant que script séparé. Lorsqu'il n'est pas en mode débogage, le fichier min précompilé doit être inclus dans votre bundle.
la source
J'ai trouvé une bonne solution qui fonctionne au moins dans MVC5, vous pouvez simplement utiliser à la
Bundle
place deScriptBundle
. Il n'a pas le comportement intelligentScriptBundle
que nous n'aimons pas (ignorer .min, etc.) dans ce cas. Dans ma solution, j'utiliseBundle
pour les scripts de partie 3D avec des fichiers .min et .map et j'utiliseScriptBundle
pour notre code. Je n'ai remarqué aucun inconvénient à le faire. Pour le faire fonctionner de cette façon, vous devrez ajouter le fichier d'origine, par exemple angular.js, et il chargera angular.js dans le débogage et il regroupera les angular.min.js en mode de libération.la source
ScriptTable.EnableOptimizations = false
). Les chemins de script qui contiennent un modèle ne sont pas rendus (par exemple~/Scripts/thirdpartylib/*.js
). Il fait le travail quandEnableOptimizations = true
, mais il en vaScriptBundle
.System.Web.Optimizations
ou du package nugetMicrosoft.Web.Optimizations
?.min.js
fichier existe et le*.js
modèle ne correspond pas aux fichiers se terminant par.min.js
.Pour rendre les
*.min.js
fichiers, vous devez désactiverBundleTable.EnableOptimizations
, qui est un paramètre global qui s'applique à tous les bundles.Si vous souhaitez activer les optimisations pour des ensembles spécifiques uniquement, vous pouvez créer votre propre
ScriptBundle
type qui active temporairement les optimisations lors de l'énumération des fichiers dans l'ensemble.Utilisez
OptimizedScriptBundle
au lieu deScriptBundle
pour les bundles dont le fichier minifié doit toujours être utilisé, qu'il existe ou non un fichier non minifié.Exemple pour l'interface utilisateur de Kendo pour ASP.NET MVC, qui est distribué comme une collection de fichiers uniquement minifiés.
la source
Pour mon cas, j'utilisais la (merveilleuse!) Bibliothèque Knockout.js qui est disponible en versions Debug / Non:
Pour que cela fonctionne, j'ai inclus "Knockout- {Version} .js" (sans débogage) dans mon bundle et j'ai obtenu le .debug. Fichier js en mode débogage.
la source
Une façon simple de renommer le fichier .min, par exemple, vous avez abc.min.css, que de renommer ce fichier en abc_min.css et de l'ajouter à votre bundle. Je sais que ce n'est pas la bonne façon de le faire, mais juste une solution temporaire. merci et bon codage.
la source
Bundler a beaucoup d'avantages consultez cette page MAIS :
La plate-forme Microsoft MVC4 considère que vous avez au moins la version réduite et la version non réduite pour chaque ensemble de scripts ou de styles (d'autres fichiers comme Debug et vsdoc sont également disponibles). Nous avons donc des problèmes dans les situations où il n'y a qu'un seul de ces fichiers.
Vous pouvez modifier l'état de débogage dans le fichier web.config de façon permanente pour gérer la sortie:
Voir les changements de sortie! Le filtrage des fichiers a été modifié. Pour atteindre l'objectif, nous devons changer ignorer la filtration de cas qui changera la logique d'application!
la source
Mes amis, je le garderais simplement jusqu'à ce que Microsoft agisse ensemble
Essaye ça
Dans RegisterBundles, créez ce bundle pour Kendo
Dans _Layout.cshtml, mettez ceci:
De cette façon, nous obtenons le meilleur des bundles en production et une référence dans le débogage
Réparez-le lorsque Microsoft corrige son code MVC 4
la source