Как получить массив путей к файлам?

Коллеги. Есть старая сборка не моя. Собрано на gulp v-3.9.1 && angularjs v-1.4.9, Angularjs вообще собирается через bower, в общем все старое и не пригодное.

Смысл проблемы в том, что меня попросили написать функцию для слайдера, который будет собирать все фото из определенной папки в массив. Заказчики хотят просто менять или добавлять папки с фото и получать массив путей к этим картинкам. (Чтобы не формировать массив картинок в ручную , их более 60).

У меня была подобная задача тоже на angularjs v-1.8.2 сборка webpack-5

у меня даже был вопрос на эту тему и решение было таковым

const importImg = r => r.keys().forEach((s) => [].push(s));
console.log(importImg(require.context("../../../../img/slider/", true, /\.svg$/)));

Забыл отметить, что данная функция require.context(... в данной сборке не работает

Подскажите как реализовать данную задачу на клиенте? Единственное, что придумал, это формировать массив на сервере и отправить на клиент. (это уже готово и работает).

Просто стало интересно можно ли это сделать только на клиенте?


Ответы (1 шт):

Автор решения: Qwertiy

Насколько я понял, при изменении картинок пересобирается весь проект?

Решение спорное, но под него легко намутить костыль: перед сборкой выполняем команду

node -e "fs.writeFileSync('files.js', 'const files = ' + JSON.stringify(fs.readdirSync('.'), null, 2), 'utf8')"

а уже этот файл используем коде приложения (можно вместо глобальной константы сделать ангулярную или вообще намотать что угодно вокруг массива).

Проблема:

Если картинки могут добавлять разные люди, в этом файле могут возникать конфликты.

Возможные решения:

  • добавить его в .gitignore
  • при возникновении конфликтов спокойно аппрувить любой и перегенерировать
  • научить гит самостоятельно перегенерировать файл вместо мёрджа
→ Ссылка