Node.js 组合来自多个文件的模块/导出
Posted
技术标签:
【中文标题】Node.js 组合来自多个文件的模块/导出【英文标题】:Node.js Combine module/exports from multiple files 【发布时间】:2014-06-27 03:13:59 【问题描述】:我希望将大型配置 .js 文件拆分为多个较小的文件,但仍将它们组合到同一个模块中。这是常见的做法吗?最好的方法是什么,以便在添加新文件时不需要扩展模块。
添加新文件时,例如但不需要更新 math.js 的示例。
数学 - 添加.js - 减法.js - 数学.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));
【问题讨论】:
node.js require all files in a folder? 的可能重复项 世界上所有的搜索,我都没有找到。谢谢。 【参考方案1】:您可以创建一个子文件夹来自动分配功能和其他对象。
mymodule.js
const pluginDir = __dirname + '/plugins/';
const fs = require('fs');
module.exports = ;
fs.readdirSync(pluginDir).forEach(file =>
Object.assign(module.exports,require(pluginDir + file));
);
plugins/mymodule.myfunction.js
module.exports =
myfunction: function()
console.log("It works!");
;
index.js
const mymodule = require('mymodule.js');
mymodule.myfunction();
// It works!
【讨论】:
【参考方案2】:您可以使用扩展运算符...
或者如果这不起作用Object.assign
。
module.exports =
...require('./some-library'),
;
或者:
Object.assign(module.exports, require('./some-library'));
【讨论】:
【参考方案3】:如果你的 NodeJs 允许 spread (...) 运算符(检查它here),你可以这样做:
module.exports =
...require('./src/add'),
...require('./src/subtract')
【讨论】:
... 如果没有? @chad,一个选项可能是编写 javascript ES6 并使用 babel(或其他)生成 ES5 并使用旧的 node.js 运行它。 Object.assign 一直是在传播运算符之前执行此操作的方法。module.exports = Object.assign(, require('./src/add'), require('./src/subtract'));
【参考方案4】:
你可以这样做
// 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));
【讨论】:
以上是关于Node.js 组合来自多个文件的模块/导出的主要内容,如果未能解决你的问题,请参考以下文章