Importmap - fichier distant non standard

Si on veut récupérer le js esm avec ce type d'url : https://cdn.jsdelivr.net/npm/lodash@4.17.21/+esm cela ne fonctionne pas. Il y a un double point de blocage :

  1. https://git.spip.net/spip/ecrire/-/blob/importmap_fichier_distant/inc/importmap.php?ref_type=heads#L29 on test si l'url termine par .js ou .js.html En changeant la regex par ([.]js(\.html)?)?(esm)?$ on test que le fichier finisse par .js ou .js.html ou esm cela fonctionne
  2. https://git.spip.net/spip/ecrire/-/blob/importmap_fichier_distant/inc/importmap.php?ref_type=heads#L35 basename(https://cdn.jsdelivr.net/npm/lodash@4.17.21/+esm donne +esm pas top pour un nom de fichier

Solution :

  • ajouter un deuxieme argument à la fonction chemin_import_js($fichier) => function chemin_import_js($fichier, $nom_fichier = null)

  • et utiliser cet argument :

    if (!$nom_fichier) {
    	$nom_fichier = basename($fichier);
    }
    $chemin = copie_locale($fichier, 'auto', sous_repertoire(_DIR_VAR . 'node_modules') . basename($nom_fichier));

et on modifie son appel : https://git.spip.net/spip/ecrire/-/blob/importmap_fichier_distant/inc/importmap.php?ref_type=heads#L136 par :

$tab_importmap['imports'][$cle] = chemin_import_js($f, $cle);

cela fonctionne, avec l'appel du pipeline importmap :

$flux['data']['lodash.js'] = 'https://cdn.jsdelivr.net/npm/lodash@4.17.21/+esm';
Modification effectuée par tofulm