Tất cả các giá trị cho @splintor (cảm ơn).
Nhưng đây là phiên bản có nguồn gốc của riêng tôi.
Những lợi ích:
- Những gì mô-đun xuất được tập hợp dưới một
{module_name: exports_obj}
đối tượng.
- module_name được xây dựng từ tên tệp của nó.
- ... không có phần mở rộng và thay thế dấu gạch chéo bằng dấu gạch dưới (trong trường hợp quét thư mục con).
- Đã thêm nhận xét để dễ dàng tùy chỉnh.
- Tức là bạn có thể không muốn bao gồm các tệp trong các thư mục con nếu chúng ở đó được yêu cầu thủ công cho các mô-đun cấp gốc .
CHỈNH SỬA: Nếu, giống như tôi, bạn chắc chắn rằng các mô-đun của mình sẽ không trả về bất cứ thứ gì khác ngoài (ít nhất là ở cấp cơ sở) một đối tượng javascript thông thường, bạn cũng có thể "gắn kết" chúng sao chép cấu trúc thư mục gốc của chúng (xem Mã (Phiên bản sâu) ) ở cuối).
Mã (Phiên bản gốc):
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
));
Thí dụ:
Đầu ra mẫu cho cuối cùng console.log(allModules);
:
{
main: { title: 'Webpack Express Playground' },
views_home: {
greeting: 'Welcome to Something!!',
title: 'Webpack Express Playground'
}
}
Cây thư mục:
models
├── main.js
└── views
└── home.js
Mã (Phiên bản sâu):
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
));
Thí dụ:
Kết quả của ví dụ trước sử dụng phiên bản này:
{
main: { title: 'Webpack Express Playground' },
views: {
home: {
greeting: 'Welcome to Something!!',
title: 'Webpack Express Playground'
}
}
}
image-size-loader
cho tất cả các hình ảnh để tạo trình giữ chỗ với tỷ lệ khung hình chính xác.