Pour des raisons de maintenance du site, un arrêt du site aura lieu lundi 16 décembre 2019 à partir de 18H00, pour une durée estimée de 30 minutes.

Veuillez nous excuser pour les désagréments que cette opération pourrait causer.

We apologize for untranslated text, you can use the Google Translation button to get an automatic translation of the web page in the language of your choice.

jspacker : les js ne sont pas concaténés dans l'ordre

Patrice Maziero · on 9/19/16 at 4:00 PM

Bonjour,

J'ai un soucis avec l'ordre de concatenation des js avec le jspacker.

J'importe les librairies js sur toutes mes pages en utilisant le jcmsContext :

    // Prototype assets
    jcmsContext.addJavaScript("js/lib/prototype.js");
    jcmsContext.addJavaScript("js/lib/effects.js");
    
    // FancyBox assets
    jcmsContext.addCSSHeader("plugins/XXXPlugin/css/fancyprotobox.css");
    jcmsContext.addJavaScript("plugins/XXXPlugin/js/fancyprotobox.js");
    jcmsContext.addJavaScript("plugins/XXXPlugin/js/abp.fancyprotobox.js");

D'autres js spécifiques à certaines pages sont appelés de la même façon.

Le js packer est activé.

Avec Firebug je vois bien l'appel au jspacker.jsp:

https://xxxxx/js/jspacker.jsp?js=js/lib/prototype.js&js=js/lib/effects.js&js=plugins/XXXPlugin/js/fancyprotobox.js&js=plugins/XXXPlugin/js/abp.fancyprotobox.js&js=/domifront/front/front.nocache.js&js=plugins/XXXPlugin/js/accordion.js&js=plugins/XXXPlugin/js/accordion-behavior.js&js=plugins/GestionCookiesCNILPlugin/js/plugin.js

Lorsque je teste directement l'instance JCMS je n'ai pas la même réponse qu'en attaquant le JCMS+frontal, pourtant la requête est strictement identique.

  • JCMS seul : le jspacker retourne les js concaténés dans l'ordre défini dans les jsp
  • JCMS + frontal : certains js (GestionCookiesCNILPlugin/js/plugin.js, js/accordion.js) sont concaténés au début et surtout avant prototype.js et effects.js

Le problème c'est que les deux scripts appelés en premier sont dépendant des lib prototype et effects, j'ai donc une erreur javascript au lancement de la page.

NB: le frontal est un simple passe-plat

 

Je voudrais savoir comment le jspacker effectue la concatenation et s'il est possible de forcer un ordre dans les js ou comment faire pour gérer les dépendances js correctement.

NB: les js en erreur ne sont pas des librairies, il y a des executions effectuées au chargement de la page, il est donc impératif de s'assurer ques les librairies soient chargées avant.

13 pts
Olivier Jaquemet - on 9/19/16 at 4:08 PM
Best answer

Bonjour, 

Le fait d'être derrière un frontal ne modifie pas le comportement de packing de JCMS. 
Si lorsque vous contactez JCMS directement les URLs sont dans le bon ordre, le comportement est nominal.

Vérifiez qu'il n'y a pas de réécriture de page ou d'URL effecté coté serveur frontal.

 

 

9 pts
Patrice Maziero · on 9/19/16 at 4:21 PM

Merci pour votre réponse rapide,

Il y a effectivement une réécriture d'URL, nous avons un mécanisme de FakeProxy qui détourne le fonctionnement du Reverse Proxy afin de gérer plusieurs contexte différents:

- la requete passant par le frontal positionne un parametre "site":

si www.url1.fr  => urljcms?site=url1

si www.url2.com => urljcms?site=url2

- côté JCMS un plugin traite ce parametre et permet de réécrire l'url de la réponse avec les url spécifiées dans le Reverse Proxy et ainsi restituer l'url frontale du site.

Tous les appels du frontal à JCMS sont soumis à cette réécriture, est ce que cela peut avoir une influence sur le jspacker.jsp?

 

 

#1

Oui, certainement puisque cela ne fonctionne pas :) Désactivez cette réécriture et testez à nouveau, et si cela fonctionne, alors analyser votre configuration pour l'adapter au besoin, soit pour corriger une mauvaise réécriture/passage de paramètre (qui pourrait d'ailleurs impacter de nombreuse autres fonctionnalité) soit pour exclure les urls de JSPacker.

Olivier Jaquemet · on 9/19/16 at 4:27 PM
#2

ce qui est troublant c'est que jspacker retourne bien toutes les js passés en parametre mais pas dans le bon ordre dans le cas du frontal. Je regarde la conf du frontal

Patrice Maziero · on 9/19/16 at 4:34 PM
0 pts
Patrice Maziero · on 9/19/16 at 5:25 PM

Trouvé!

Effectivement la piste du frontal était la bonne!

Il s'avère que le mécanisme de réécriture d'url traite aussi les paramêtres d'url et je ne sais pas pourquoi mais il sont réécris dans un autre ordre.

Bref problem solved.

 

#1

bonne nouvelle, merci de votre confirmation.

Olivier Jaquemet · on 9/19/16 at 5:45 PM
2 pts