Voici donc mon flux de travail actuel pour l'importation d'images et d'icônes dans Webpack via ES6:
import cat from './images/cat1.jpg'
import cat2 from './images/cat2.svg'
import doggy from './images/doggy.png'
import turtle from './images/turtle.png'
<img src={doggy} />
Cela devient vite compliqué. Voici ce que je veux:
import * from './images'
<img src={doggy} />
<img src={turtle} />
J'ai l'impression qu'il doit y avoir un moyen d'importer dynamiquement tous les fichiers d'un répertoire spécifique sous leur nom sans extension, puis d'utiliser ces fichiers selon les besoins.
Quelqu'un a-t-il vu cela fait, ou a-t-il des idées sur la meilleure façon de procéder?
METTRE À JOUR:
En utilisant la réponse sélectionnée, j'ai pu faire ceci:
function importAll(r) {
let images = {};
r.keys().map((item, index) => { images[item.replace('./', '')] = r(item); });
return images;
}
const images = importAll(require.context('./images', false, /\.(png|jpe?g|svg)$/));
<img src={images['doggy.png']} />
reactjs
webpack
ecmascript-6
klinore
la source
la source
.map
genre d'attentes attend une valeur de retour. Dans votre cas, on utiliserait un bon vieux à laforEach
place.r.keys.().map(...)
directement ...Réponses:
Pas dans ES6. L'intérêt de
import
etexport
est que les dépendances peuvent être déterminées de manière statique , c'est-à-dire sans exécuter de code.Mais puisque vous utilisez webpack, jetez un œil à
require.context
. Vous devriez pouvoir effectuer les opérations suivantes:la source
cra
importAll
rien retourné.C'est facile. Vous pouvez utiliser
require
(une méthode statique, l'importation est juste pour les fichiers dynamiques) dans lerender
. Comme l'exemple ci-dessous:la source
J'ai un répertoire des drapeaux de pays png nommés comme au.png, nl.png etc. Donc j'ai:
index.js
J'ai lu un fichier comme celui-ci:
CountryFlagByCode.js
la source
Une approche fonctionnelle pour résoudre ce problème:
la source
MISE À JOUR Il semble que je n'ai pas bien compris la question. @Felix a bien compris, alors vérifiez sa réponse. Le code suivant fonctionnera uniquement dans un environnement Nodejs.
Ajouter un
index.js
fichier dans leimages
dossierCela vous permettra d'importer tout à partir d'un autre fichier et Wepback l'analysera et chargera les fichiers requis.
la source