Semua manfaat untuk @splintor (terima kasih).
Tapi ini dia versi turunan saya sendiri.
Manfaat:
- Ekspor modul apa yang dikumpulkan di bawah
{module_name: exports_obj}
objek.
- module_name dibangun dari nama filenya.
- ... tanpa ekstensi dan mengganti garis miring dengan garis bawah (untuk pemindaian subdirektori).
- Menambahkan komentar untuk memudahkan penyesuaian.
- Yaitu Anda mungkin ingin tidak menyertakan file dalam subdirektori jika, katakanlah, file tersebut ada di sana secara manual diperlukan untuk modul tingkat root .
EDIT: Jika, seperti saya, Anda yakin modul Anda tidak akan mengembalikan apa pun selain (setidaknya di tingkat root) objek javascript biasa, Anda juga dapat "memasang" modul tersebut mereplikasi struktur direktori aslinya (lihat Kode (Versi Dalam) ) di bagian akhir).
Kode (Versi Asli):
function requireAll(r) {
return Object.fromEntries(
r.keys().map(function(mpath, ...args) {
const result = r(mpath, ...args);
const name = mpath
.replace(/(?:^[.\/]*\/|\.[^.]+$)/g, '') // Trim
.replace(/\//g, '_') // Relace '/'s by '_'s
;
return [name, result];
})
);
};
const allModules = requireAll(require.context(
// Any kind of variables cannot be used here
'@models' // (Webpack based) path
, true // Use subdirectories
, /\.js$/ // File name pattern
));
Contoh:
Output sampel untuk akhirnya console.log(allModules);
:
{
main: { title: 'Webpack Express Playground' },
views_home: {
greeting: 'Welcome to Something!!',
title: 'Webpack Express Playground'
}
}
Pohon direktori:
models
├── main.js
└── views
└── home.js
Kode (Versi Dalam):
function jsonSet(target, path, value) {
let current = target;
path = [...path]; // Detach
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, '') // Trim
.split('/')
;
jsonSet(gather, path, result);
});
return gather;
};
const models = requireAll(require.context(
// Any kind of variables cannot be used here
'@models' // (Webpack based) path
, true // Use subdirectories
, /\.js$/ // File name pattern
));
Contoh:
Hasil dari contoh sebelumnya menggunakan versi ini:
{
main: { title: 'Webpack Express Playground' },
views: {
home: {
greeting: 'Welcome to Something!!',
title: 'Webpack Express Playground'
}
}
}
image-size-loader
untuk semua gambar untuk membuat placeholder dengan rasio aspek yang benar.