Então, aqui está meu fluxo de trabalho atual para importar imagens e ícones no 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} />
Isso fica bagunçado rápido. Aqui está o que eu quero:
import * from './images'
<img src={doggy} />
<img src={turtle} />
Eu sinto que deve haver alguma maneira de importar dinamicamente todos os arquivos de um diretório específico como seu nome sem extensão e, em seguida, usar esses arquivos conforme necessário.
Alguém viu isso ser feito ou tem alguma opinião sobre a melhor maneira de fazer isso?
ATUALIZAR:
Usando a resposta selecionada, consegui fazer o seguinte:
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
fonte
fonte
.map
espera um valor de retorno. No seu caso, seria usado um bom e velho emforEach
vez disso.r.keys.().map(...)
diretamente ...Respostas:
Não em ES6. O ponto principal de
import
eexport
é que as dependências podem ser determinadas estaticamente , ou seja, sem executar código.Mas como você está usando o webpack, dê uma olhada em
require.context
. Você deve ser capaz de fazer o seguinte:fonte
cra
importAll
nada retornou.É fácil. Você pode usar
require
(um método estático, a importação é apenas para arquivos dinâmicos) dentro dorender
. Como o exemplo abaixo:fonte
Eu tenho um diretório de bandeiras de países png nomeados como au.png, nl.png etc. Então eu tenho:
index.js
Eu li um arquivo como este:
CountryFlagByCode.js
fonte
Uma abordagem funcional para resolver este problema:
fonte
ATUALIZAÇÃO Parece que não entendi bem a pergunta. @Felix acertou, então verifique sua resposta. O código a seguir funcionará apenas em um ambiente Nodejs.
Adicione um
index.js
arquivo naimages
pastaIsso permitirá que você importe tudo de outro arquivo e o Wepback irá analisá-lo e carregar os arquivos necessários.
fonte