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 组合来自多个文件的模块/导出的主要内容,如果未能解决你的问题,请参考以下文章

02 node.js模块化开发

模块导出对象搜索和获取项目 node.js

如何从主 node.js 脚本运行多个 node.js 脚本?

Node学习—Node.js中模块化开发的规范

node.js 的模块化开发规范

Node.js模块导出exports 和 module.exports 的区别