2009-02-10 11 views
1

Quelles sont les meilleures façons de mettre à jour les références javascript après les avoir réduites (j'utilise YUI Compressor)? J'utilise ASP.NET mvc et ai des références groupées ou javascript dans chaque fichier pendant dev. Au moment de la construction (en utilisant MSBuild), je réduis tous les fichiers en un seul fichier. En même temps, je veux remplacer toutes les références par la référence unique. Ce devrait être une chose assez commune et pourtant je ne peux pas trouver une manière propre et automatisée de le faire.Mise à jour des références javascript après la réduction pendant le processus de construction

Vous avez des idées? Merci

Répondre

4

Nous utilisons un gestionnaire de script personnalisé. Dans notre processus msbuild, YUI Compressor est utilisé pour créer des versions minifiées, mais aussi pour combiner plusieurs petits fichiers .js en un plus grand. Cela réduit le nombre de requêtes et donc le temps de chargement. Les versions minifiées et combinées sont créées côte à côte avec les versions débogables.

Lors de l'exécution, le scriptmanager est appelé par des contrôles pour enregistrer des scripts spécifiques, auxquels ils se réfèrent par leur nom non réduit. Le gestionnaire de script va alors simplement inclure ces scripts en mode DEBUG (bien que nous effectuions une astuce qui inclut des scripts dans HEAD, pas le corps comme le fait le ClientScriptManager). En mode RELEASE, le scriptmanager va remplacer certains scripts connus par leurs homologues minifiés. Dans le cas de scripts qui sont combinés dans un fichier, le gestionnaire est appelé plusieurs fois, chaque fois en enregistrant le même fichier minifié combiné. Certains fichiers sont hébergés en externe: ils sont également gérés par le scriptmanager.

: Downsides

  • la connaissance de ce que les fichiers sont minified est dupliquée: à la fois le ScriptManager et le script de construction doivent être synchronisés.
  • Lorsque de nouveaux scripts sont ajoutés, ils seront (voir personnellement, je cela comme un bon point, je veux minification être un choix) ne pas être automatiquement minified

A propos: nous ne pas utiliser le C# port pour s'exécuter dans MSBuild. Il y avait trop de bugs quand je l'ai essayé pour la première fois. Nous appelons simplement YUI Compressor avec une tâche Exec.

+0

Merci pour vos commentaires. Quelques questions de suivi: Comment détecter le mode build (release ou debug) à l'exécution? Vous mentionnez "le scriptmanager est appelé par des contrôles pour enregistrer des scripts spécifiques". Utilisez-vous ms ajax? J'utilise ext js et donc normalement j'inscrirais js dans la HEAD. – NabilS

2

Quelques idées viennent à l'esprit:

1) Profitez du correctif publié pour permettre des versions debug/IntelliSense de fichiers .js: KB958502

Cela vous permettra d'écrire (quoique) grand fichier js entièrement lisible, mais se référer à la version complète dans votre script src, qui peut être généré au cours de la construction. Le hofix permet à VS de trouver les fichiers nommés "-vsdoc.js" ou ".debug.js" à la place des fichiers référencés (donc vous référencez "/scripts/myscript.js" dans votre attribut src, mais l'EDI va d'abord regarder pour "/scripts/myscript-vsdoc.js", puis "/scripts/myscript.debug.js", et enfin il va chercher "/scripts/myscript.js" - un peu plus d'informations peuvent être trouvées sur le Visual Web Developer team blog.

2) D'autres ont posté sur un custom script managers ils ont écrit, cela référencerait la version principale pendant le débogage, mais en mode de libération demanderait la version réduite. 3) Je suis sûr d'avoir lu quelque part, même si je ne le trouve pas pour le moment, quelqu'un qui a écrit sa propre méthode d'extension HTML, qui génèrerait l'appel de script de manière appropriée en fonction du mode buid - un processus similaire à l'idée de Rick, mais en vous permettant de travailler de manière plus «habituelle», bien que je ne sois pas sûr de la façon dont cela s'est bien passé avec intellisense.

Je suis penché vers 1 en ce moment - en utilisant un processus similaire à celui de Nick Berardi ici: How to create a YUI Compressor MSBuild Task pour générer le js minimisé.