Подтвердить что ты не робот

Как загрузить все файлы в подкаталоги с помощью webpack без запросов

У меня есть большое количество файлов javascript, разбитых на 4 подкаталога в моем приложении. В grunt я хватаю всех и компилирую их в один файл. Эти файлы не имеют функции module.exports

Я хочу использовать webpack и разбить его на 4 части. Я не хочу вручную входить и требовать все мои файлы.

Я хотел бы создать плагин, который при компиляции перемещается по деревьям каталогов, затем захватывает все имена и пути файлов .js, затем требует всех файлов в подкаталогах и добавляет их в вывод.

Я хочу, чтобы все файлы в каждом каталоге были скомпилированы в модуль, который я мог бы потребовать из моего файла точки входа, или включить в активы, которые http://webpack.github.io/docs/plugins.html упоминает.

При добавлении нового файла я просто хочу отбросить его в правильном каталоге и узнать, что он будет включен.

Есть ли способ сделать это с помощью webpack или плагина, который кто-то написал для этого?

4b9b3361

Ответ 1

Вот что я сделал для этого:

function requireAll(r) { r.keys().forEach(r); }
requireAll(require.context('./modules/', true, /\.js$/));

Ответ 2

В моем файле приложения я положил запрос

require.context(
  "./common", // context folder
  true, // include subdirectories
  /.*/ // RegExp
)("./" + expr + "")

любезно предоставлено это сообщение: https://github.com/webpack/webpack/issues/118

Теперь он добавляет все мои файлы. У меня есть загрузчик для html и css, и, похоже, он отлично работает.

Ответ 3

Как насчет карты всех файлов в папке?

// { 
//   './image1.png':  'data:image/png;base64,iVBORw0KGgoAAAANS',
//   './image2.png':  'data:image/png;base64,iVBP7aCASUUASf892',
// }

Сделайте это:

const allFiles = (ctx => {
    let keys = ctx.keys();
    let values = keys.map(ctx);
    return keys.reduce((o, k, i) => { o[k] = values[i]; return o; }, {});
})(require.context('./path/to/folder', true, /.*/));

Ответ 4

это работает для меня:

function requireAll(r) { r.keys().forEach(r); } 

requireAll(require.context('./js/', true, /\.js$/));

ПРИМЕЧАНИЕ. Это может потребовать файлы .js в поддиректорах./js/рекурсивно.