@ Splintor için tüm haklar (teşekkürler).
Ama burada benim kendi türetilmiş versiyonum.
Faydaları:
- Hangi modüllerin dışa aktarıldığı bir
{module_name: exports_obj}
nesnenin altında toplanır .
- module_name , dosya adından oluşturulur.
- ... uzatma olmadan ve eğik çizgileri alt çizgilerle değiştirmeden (alt dizin taraması durumunda).
- Özelleştirmeyi kolaylaştırmak için yorumlar eklendi.
- Örneğin, kök seviyeli modüller için manuel olarak gerekli olmaları gerekiyorsa, dosyaları alt dizinlere dahil etmemek isteyebilirsiniz .
DÜZENLEME: Benim gibi, modüllerinizin normal bir javascript nesnesinden (en azından kök düzeyinde) başka bir şey döndürmeyeceğinden eminseniz, bunları orijinal dizin yapılarını çoğaltarak "bağlayabilirsiniz" (bkz. Kod (Derin Sürüm) ) bölümü).
Kod (Orijinal Sürüm):
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$/
));
Misal:
Nihai için örnek çıktı console.log(allModules);
:
{
main: { title: 'Webpack Express Playground' },
views_home: {
greeting: 'Welcome to Something!!',
title: 'Webpack Express Playground'
}
}
Dizin ağacı:
models
├── main.js
└── views
└── home.js
Kod (Derin Sürüm):
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$/
));
Misal:
Bu sürümü kullanan önceki örneğin sonucu:
{
main: { title: 'Webpack Express Playground' },
views: {
home: {
greeting: 'Welcome to Something!!',
title: 'Webpack Express Playground'
}
}
}
image-size-loader
, doğru en boy oranlarına sahip yer tutucular oluşturmak için tüm resimler için kullanmak istememdir.