ขออนุโมทนาบุญกับ @splintor (ขอบคุณ)
แต่นี่เป็นเวอร์ชันที่ได้มาของฉันเอง
สิทธิประโยชน์:
- การส่งออกโมดูลใดบ้างที่รวบรวมภายใต้ไฟล์
{module_name: exports_obj}
วัตถุ
- module_nameสร้างจากชื่อไฟล์
- ... โดยไม่ต้องขยายและแทนที่เครื่องหมายทับด้วยขีดล่าง (ในกรณีของการสแกนไดเรกทอรีย่อย)
- เพิ่มความคิดเห็นเพื่อความสะดวกในการปรับแต่ง
- กล่าวคือคุณอาจไม่ต้องการรวมไฟล์ในไดเร็กทอรีย่อยหากกล่าวว่าไฟล์เหล่านี้จำเป็นต้องใช้ด้วยตนเองสำหรับโมดูลระดับรูท
แก้ไข:ถ้าเช่นฉันคุณแน่ใจว่าโมดูลของคุณจะไม่ส่งคืนสิ่งอื่นใดนอกจาก (อย่างน้อยในระดับรูท) ออบเจ็กต์จาวาสคริปต์ทั่วไปคุณยังสามารถ "เมานต์" พวกเขาเพื่อจำลองโครงสร้างไดเร็กทอรีดั้งเดิมของพวกเขาได้ (ดูรหัส (เวอร์ชันลึก) )ในตอนท้าย)
รหัส (เวอร์ชันดั้งเดิม):
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$/
));
ตัวอย่าง:
ผลลัพธ์ตัวอย่างสำหรับในที่สุดconsole.log(allModules);
:
{
main: { title: 'Webpack Express Playground' },
views_home: {
greeting: 'Welcome to Something!!',
title: 'Webpack Express Playground'
}
}
แผนผังไดเรกทอรี:
models
├── main.js
└── views
└── home.js
รหัส (รุ่นลึก):
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$/
));
ตัวอย่าง:
ผลลัพธ์ของตัวอย่างก่อนหน้าโดยใช้เวอร์ชันนี้:
{
main: { title: 'Webpack Express Playground' },
views: {
home: {
greeting: 'Welcome to Something!!',
title: 'Webpack Express Playground'
}
}
}
image-size-loader
สำหรับรูปภาพทั้งหมดเพื่อสร้างตัวยึดตำแหน่งที่มีอัตราส่วนภาพที่ถูกต้อง