Здравствуй, %username%! Разрабатывая проект на Node.js я столкнулся с невозможностью сделать require
целой папки.
Допустим, у нас есть такое дерево каталогов:
Project
— handlers
— — admin.js
— — user.js
— — settings.js
— routes
— — admin.js
— — user.js
— — settings.js
— app.js
Как правило, если нам необходимо добавить новый handler, то мы создаем там файл, затем прописываем адрес к нему в require и радуемся, но иногда хочется иметь сразу все файлы в одном объекте (чтобы наш алгоритм сводился только лишь к созданию файла).
Для этого мы должны в каждой нужной папке создать файл index.js и поместить в него следующий код:
var curFile, curPath, dir, fs, path, result, value, _i, _len;
result = {};
fs = require('fs');
path = require('path');
curPath = path.dirname(__filename);
curFile = path.basename(__filename);
dir = fs.readdirSync(curPath);
for (_i = 0, _len = dir.length; _i < _len; _i++) {
value = dir[_i];
if (value !== curFile) {
result[value.split('.')[0]] = require(curPath + '/' + value);
}
}
module.exports = result;
И затем мы можем указать просто require('./routes')
или require('./handlers')
и получить объект, свойствами которого будут названия файлов в этой директории. Каждое свойство будет содержать require
одноименного файла.
P.S: Метод не претендует на что-либо.
Автор: mannaro