Node.js Объединить модуль/экспорт из нескольких файлов
Я хочу разбить файл большой конфигурации .js на несколько меньших файлов, но все же объединить их в один и тот же модуль. Является ли это обычной практикой и как лучше всего подходит, чтобы модуль не нуждался в расширении при добавлении новых файлов.
Пример, например, но не требующий обновления math.js при добавлении нового файла.
по математике
- add.js
- subtract.js
- math.js
// add.js
module.exports = function(v1, v2) {
return v1 + v2;
}
// subtract.js
module.exports = function(v1, v2) {
return v1 - v2;
}
// math.js
var add = require('./add');
exports.add = add;
var subtract = require('./subtract');
exports.subtract = subtract;
// app.js
var math = require('./math');
console.log('add = ' + math.add(5,5));
console.log('subtract =' + math.subtract(5,5));
Ответы
Ответ 1
Вы можете сделать это
// math.js
module.exports = function (func){
return require('./'+func);
}
//use it like this
// app.js
var math = require('./math');
console.log('add = ' + math('add')(5,5));
console.log('subtract =' + math('subtract')(5,5));
Ответ 2
Вы можете использовать оператор распространения ...
или, если это не работает Object.assign
.
module.exports = {
...require('./some-library'),
};
Или же:
Object.assign(module.exports, require('./some-library'));
Ответ 3
Если ваш NodeJs позволяет spread (...) оператор (проверьте здесь), вы можете сделать:
module.exports = {
...require('./src/add'),
...require('./src/subtract')
}
Ответ 4
Вы можете создать подпапку для автоматического назначения функций и других объектов.
mymodule.js
const pluginDir = __dirname + '/plugins/';
const fs = require('fs');
module.exports = {};
fs.readdirSync(pluginDir).forEach(file => {
Object.assign(module.exports,require(pluginDir + file));
});
плагины/mymodule.myfunction.js
module.exports = {
myfunction: function(hostname, login, password) {
console.log("It works!");
}
};
index.js
const mymodule = require('mymodule.js');
mymodule.myfunction();
// It works!