Ответ 1
Вот что я сделал для этого:
function requireAll(r) { r.keys().forEach(r); }
requireAll(require.context('./modules/', true, /\.js$/));
У меня есть большое количество файлов javascript, разбитых на 4 подкаталога в моем приложении. В grunt я хватаю всех и компилирую их в один файл. Эти файлы не имеют функции module.exports
Я хочу использовать webpack и разбить его на 4 части. Я не хочу вручную входить и требовать все мои файлы.
Я хотел бы создать плагин, который при компиляции перемещается по деревьям каталогов, затем захватывает все имена и пути файлов .js, затем требует всех файлов в подкаталогах и добавляет их в вывод.
Я хочу, чтобы все файлы в каждом каталоге были скомпилированы в модуль, который я мог бы потребовать из моего файла точки входа, или включить в активы, которые http://webpack.github.io/docs/plugins.html упоминает.
При добавлении нового файла я просто хочу отбросить его в правильном каталоге и узнать, что он будет включен.
Есть ли способ сделать это с помощью webpack или плагина, который кто-то написал для этого?
Вот что я сделал для этого:
function requireAll(r) { r.keys().forEach(r); }
requireAll(require.context('./modules/', true, /\.js$/));
В моем файле приложения я положил запрос
require.context(
"./common", // context folder
true, // include subdirectories
/.*/ // RegExp
)("./" + expr + "")
любезно предоставлено это сообщение: https://github.com/webpack/webpack/issues/118
Теперь он добавляет все мои файлы. У меня есть загрузчик для html и css, и, похоже, он отлично работает.
Как насчет карты всех файлов в папке?
// {
// './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, /.*/));
это работает для меня:
function requireAll(r) { r.keys().forEach(r); }
requireAll(require.context('./js/', true, /\.js$/));
ПРИМЕЧАНИЕ. Это может потребовать файлы .js в поддиректорах./js/рекурсивно.