J'utilise unplugin-icon pour créer un composant d'icône, normalement je peux importer par exemple
.//script import IconCopy from '~icons/prime/copy' //template <IconCopy/>
Cela fonctionne, mais si nous voulons utiliser une autre icône, cela ne semble pas pratique d'importer une par une, j'ai donc créé un composant dynamique appelé Eunoicon.vue
<script setup> const props = defineProps({ icon : {type:String} }) const from = `~icons/prime/${props.icon}` const TheIcon = await import(/* @vite-ignore */from) console.log('ti',TheIcon) </script> <template> <TheIcon/> </template>
Mais lorsque j'essaie de l'importer dans un composant, cela génère une erreur Uncaught (in Promise) TypeError: 无法解析模块说明符 '~icons/prime/copy'.
Des suggestions pour cette approche ou une bibliothèque d'icônes proposant une approche simple ? J'ai essayé vue font Awesome mais ce n'est toujours pas aussi simple que je le souhaiterais.
Malheureusement, il n'est actuellement pas possible de créer des importations dynamiques. Je me suis retrouvé avec le même problème il y a quelques mois. Ma solution était de traiter les icônes en SVG et de créer un fichier d'import attaché à mon projet comme ceci :
Et créez un composant de vue comme indiqué ci-dessous qui récupérera l'icône correspondant au nom donné à l'aide d'accessoires.
Bien sûr, créer manuellement le fichier d'importation serait fastidieux, donc dans mon cas, j'ai créé un script python qui prend le chemin d'accès au dossier des icônes SVG et traite chaque icône pour les réduire et créer automatiquement le fichier d'importation. Ce script fonctionne avec les icônes de la bibliothèque d'icônes Phosphor. Vous pouvez trouver le code des scripts et des composants Vue dans le dépôt github :
https://github.com/fchancel/Phosphor-icon-vue-component
Si vous décidez d'utiliser une icône Phosphor, n'hésitez pas à vous en inspirer, à la modifier ou à l'utiliser