Wszystkie zasługi dla @splintor (dzięki).
Ale tutaj jest moja własna wersja pochodna.
Korzyści:
- Jakie moduły są eksportowane do
{module_name: exports_obj}
obiektu.
- nazwa_modułu jest budowana na podstawie jego nazwy pliku.
- ... bez rozszerzenia i zamiany ukośników na podkreślenia (w przypadku skanowania podkatalogów).
- Dodano komentarze ułatwiające dostosowywanie.
- To znaczy możesz chcieć nie dołączać plików do podkatalogów, jeśli, powiedzmy, są tam, aby być ręcznie wymagane na poziomie głównym modułów .
EDYTOWAĆ: Jeśli, tak jak ja, jesteś pewien, że twoje moduły nie zwrócą niczego innego niż (przynajmniej na poziomie głównym) zwykły obiekt javascript, możesz także "zamontować" je replikując ich oryginalną strukturę katalogów (patrz Kod (wersja głęboka ) na końcu).
Kod (wersja oryginalna):
function requireAll(r) {
return Object.fromEntries(
r.keys().map(function(mpath, ...args) {
const result = r(mpath, ...args);
const name = mpath
.replace(/(?:^[.\/]*\/|\.[^.]+$)/g, '')
.replace(/\//g, '_')
;
return [name, result];
})
);
};
const allModules = requireAll(require.context(
'@models'
, true
, /\.js$/
));
Przykład:
Przykładowe dane wyjściowe na ewentualne console.log(allModules);
:
{
main: { title: 'Webpack Express Playground' },
views_home: {
greeting: 'Welcome to Something!!',
title: 'Webpack Express Playground'
}
}
Drzewo katalogów:
models
├── main.js
└── views
└── home.js
Kod (wersja głęboka):
function jsonSet(target, path, value) {
let current = target;
path = [...path];
const item = path.pop();
path.forEach(function(key) {
(current[key] || (current[key] = {}));
current = current[key];
});
current[item] = value;
return target;
};
function requireAll(r) {
const gather = {};
r.keys().forEach(function(mpath, ...args) {
const result = r(mpath, ...args);
const path = mpath
.replace(/(?:^[.\/]*\/|\.[^.]+$)/g, '')
.split('/')
;
jsonSet(gather, path, result);
});
return gather;
};
const models = requireAll(require.context(
'@models'
, true
, /\.js$/
));
Przykład:
Wynik poprzedniego przykładu używającego tej wersji:
{
main: { title: 'Webpack Express Playground' },
views: {
home: {
greeting: 'Welcome to Something!!',
title: 'Webpack Express Playground'
}
}
}
image-size-loader
dla wszystkich obrazów, aby utworzyć symbole zastępcze z prawidłowymi współczynnikami proporcji.