#javascript #reactjs #ecmascript-6
#javascript #reactjs #ecmascript-6
Вопрос:
Текущая ситуация выглядит следующим образом:
// ./img/index.js:
import some-image from "./some-image.png";
import some-other-image from "./some-other-image.png";
// About 50 of these imports
export const imageArray = [some-image, some-other-image] //...and the other 48 imported images go in this array
Оказывается, что при полном вводе это довольно длинное заявление об экспорте. Чего я хочу добиться, так это заполнить export imageArray всем импортированным изображением более автоматизированным способом без необходимости копировать вставлять имена переменных из import.
Что-то вроде:
export const imageArray = [this.Imports];
Возможно ли что-то подобное?
Комментарии:
1. developer.mozilla.org/en-US/docs/web/javascript/reference /… , предпоследний из примеров «Агрегирующих модулей».
2. Используете ли вы модульный пакет? Я предполагаю, что это так, поскольку вы импортируете изображения. У этого сборщика, вероятно, есть способ импортировать все файлы, соответствующие шаблону. Или вы могли бы написать простой скрипт, который генерирует файл JavaScript для вас.
3. @Mike’Pomax’Camermans Это может быть идеально! Спасибо!
Ответ №1:
Вы можете сделать это с помощью babel-plugin-wildcard.
import * as images from "./images/*.png"
export default images
// or
export const imageArray = images
Комментарии:
1. Спасибо за этот потрясающий вопрос и ответ.
Ответ №2:
Если вы хотите сделать это без какого-либо третьего модуля:
const fs = require('fs');
const path = require('path');
// In this example i supose you have only images at the folder!
async function getImages(folder) {
const images = [];
const files = await fs.promises.readdir(folder, { withFileTypes: true });
for (let file of files) {
images.push(path.join(__dirname, folder, file));
}
return images;
}
const imageArray = [];
// The '.' should be the path where are your images at.
const array = getImages('.');
// It could be like this or doing the reverse call when importing this imageArray...
array.forEach(el => {
import image from el;
imageArray.push(image)
});
export imageArray;
Комментарии:
1. Я не верю, что это сработает так, как вы могли ожидать. Это вернет пути ко всем изображениям, но не будет запускать их через загрузчик webpack или аналогичный.
2. Спасибо за пример! Это действительно вернуло пути к изображениям, а не изображения для загрузки браузером, но, поскольку я не указал, что это будет очень полезно для людей, ищущих подход rel path!