Open TheoLechemia opened 7 months ago
Une autre solution consiste à essayer de réactiver le fonctionnement précédent (ou presque).
Le problème c'est qu'Angular ne supporte plus les "wildcard" (*) dans le chemin du paramètre input
. Il est nécessaire d'utiliser les "wildcard" dans le paramètres glob
. De plus, pour suivre les liens symboliques des modules présent dans le dossier frontend/external_modules/
, il faut mettre le paramètre followSymlinks
à true
.
Pour cela, il suffit de remplacer le code actuel:
{
"glob": "**/*",
"input": "external_modules/*/assets/",
"output": "./assets/"
}
par ceci:
{
"followSymlinks": true,
"glob": "**/assets/**/*",
"input": "./external_modules/",
"output": "/assets/"
}
Au final, si j'ai dans frontend/external_modules/
un module nommé sht
, je vais avoir le chemin frontend/external_modules/sht/assets/
vers mon fichier marker-icon.png
.
Lorsque j'applique la nouvelle règle, après l'utilisation de npm run build
, je me retrouve dans le dossier frontend/dist/
avec frontend/dist/assets/sht/assets/marker-icon.png
L'URL à utiliser, par rapport à la racine de mon site, pour accéder à mon fichier sera : /assets/sht/assets/marker-icon.png
.
J'ai fait quelques recherches et il ne me semble pas possible de "supprimer" le deuxième dossier assets/
. Si l'on veut éviter cette répétition, il est possible de modifier le chemin de sortie pour obtenir par exemple: /modules/sht/assets/marker-icon.png
Dans ce cas là, la config serait:
{
"followSymlinks": true,
"glob": "**/assets/**/*",
"input": "./external_modules/",
"output": "/modules/"
}
Une alternative reprenant la solution proposait par @TheoLechemia est de créer un dossier contenant exclusivement des liens symboliques vers les dossiers assets de chaque module. Il pourrait être placé dans le dossier frontend/external_modules/assets/
. Je me retrouverai donc avec frontend/external_modules/assets/*sht*/marker-icon.png
et dans le dossier de sortie frontend/dist/assets/sht/marker-icon.png
soit l'URL /assets/sht/marker-icon.png
Dans ce cas là, la config serait:
{
"followSymlinks": true,
"glob": "**/*",
"input": "./external_modules/assets/",
"output": "/assets/"
}
Le problème c'est qu'il faut modifier le fonctionnement de l'installation des modules pour créer ces nouveaux liens symboliques.
Dans tous les cas, nous sommes obligé à minima de changer le chemin des assets des modules pour corriger le problème.
Ressources:
Ta première solution me semble meilleur que de devoir refaire un lien symbolique à la main
J'ai corrigé le paramètre glob
pour que tous les sous-dossiers présents dans le dossier assets des modules externes soient pris en compte.
Les "assets" fournis par les modules externes ne sont plus chargés. Le fichier
angular.json
est configuré pour les servir à la racine du projet : https://github.com/PnX-SI/GeoNature/blob/master/frontend/angular.json#L36 :la wildcard dans
input
ne semble pas fonctionner (même en rajoutant unfollowSymlinks:true
)Solution de contournement - à voir si on fait comme ça : faire un lien symbolique des assets du module externe vers le dossier
frontend/assets
du coeur et modifier le fichierangular.json
comme suit :