web-dev-qa-db-fra.com

JS - Impossible de combiner des fichiers lib

J'ai plusieurs fichiers lib dans un fichier index.html, qui sont chargés dans l'ordre approprié pour une application que j'exécute.

<!-- example of some of them... -->
<script src="/./sys/lib/jquery.min.js"></script>
<script src="/./sys/lib/jquery.ui.min.js"></script>
<script src="/./sys/lib/jquery.easing.min.js"></script>
<script src="/./sys/lib/underscore.min.js"></script>
<script src="/./sys/lib/handlebars.min.js"></script>
<script src="/./sys/lib/backbone.min.js"></script>
<script src="/./sys/lib/moment.min.js"></script>
<script src="/./sys/lib/libs.extensions.js"></script>

Ceux-ci fonctionnent bien, ils sont déjà tous minifiés.

Maintenant, je veux les combiner en un seul fichier pour la vitesse de chargement:

<script src="/./sys/lib/libs.all.js"></script>

J'ouvre donc le nouveau libs.all.js fichier, et un par un, collez-y les fichiers .js minifiés, avec zéro modification, dans le exactement la même séquence comme indiqué ci-dessus. Cela fonctionne jusqu'à ce que j'arrive à moment.js. Lorsque je le colle puis l'exécute, j'obtiens une erreur JS.

TypeError: (intermediate value)(...) is not a function

Je n'obtiens pas ce qui me manque - si je les colle dans le bon ordre pendant qu'ils se synchronisent chargés dans le fichier HTML, quelle est la différence?

45
dthree

Il est très probable que l'un de vos fichiers js manque un ; à la fin. Ouvrez celui que vous pensez être à l'origine de l'erreur et ajoutez un ; à la fin, ou ajoutez un ; à la toute première ligne du fichier js suivant.

105
bagonyi

il suffit d'ajouter un semi-clone et une nouvelle ligne

';\n'

à la fin de chaque fichier

2
Amr Ibrahim

La modification du code javascript ne résout pas la cause première du problème, cela peut donc se reproduire dès que vous introduisez un nouveau fichier JavaScript.

Vous avez au moins peu de choix pour un correctif permanent - ils impliquent de changer la construction afin que cela ne puisse pas se produire à l'avenir, même si un point-virgule est manquant:

  • Injectez un ; entre les fichiers que vous concaténez. Il s'agit généralement d'un simple changement d'une ligne selon la façon dont vous concaténez les fichiers.
  • Réduisez d'abord les fichiers, puis concaténez. Cela devrait laisser un\n entre les fichiers que vous concaténez, permettant à ASI de s'en occuper pour vous.
2
dale.lotts