Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/457.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Node.js合并模块/从多个文件导出_Javascript_Node.js_Module - Fatal编程技术网

Javascript Node.js合并模块/从多个文件导出

Javascript Node.js合并模块/从多个文件导出,javascript,node.js,module,Javascript,Node.js,Module,我希望将一个大型configuration.js文件拆分为多个较小的文件,但仍将它们合并到同一个模块中。这是一种常见做法,什么是最佳方法,以便在添加新文件时不需要扩展模块 例如,添加新文件时不需要更新math.js 数学 -add.js -subtract.js -math.js // add.js module.exports = function(v1, v2) { return v1 + v2; } // subtract.js module.exports = function

我希望将一个大型configuration.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));
你可以这样做

// 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));
如果NodeJs允许(…)操作符(选中它),则可以执行以下操作:

    module.exports = {
        ...require('./src/add'),
        ...require('./src/subtract')
    }

您可以使用扩展运算符
或者如果该运算符不起作用
对象。分配

module.exports={
…需要(“/某些库”),
};
或:

Object.assign(module.exports,require('./some library');

您可以创建一个子文件夹来自动分配函数和其他对象

mymodule.js

const pluginDir = __dirname + '/plugins/';
const fs = require('fs');

module.exports = {};

fs.readdirSync(pluginDir).forEach(file => {
    Object.assign(module.exports,require(pluginDir + file));
});
module.exports = {

    myfunction: function() {
        console.log("It works!");
    }

};
const mymodule = require('mymodule.js');

mymodule.myfunction();
// It works!
插件/mymodule.myfunction.js

const pluginDir = __dirname + '/plugins/';
const fs = require('fs');

module.exports = {};

fs.readdirSync(pluginDir).forEach(file => {
    Object.assign(module.exports,require(pluginDir + file));
});
module.exports = {

    myfunction: function() {
        console.log("It works!");
    }

};
const mymodule = require('mymodule.js');

mymodule.myfunction();
// It works!
index.js

const pluginDir = __dirname + '/plugins/';
const fs = require('fs');

module.exports = {};

fs.readdirSync(pluginDir).forEach(file => {
    Object.assign(module.exports,require(pluginDir + file));
});
module.exports = {

    myfunction: function() {
        console.log("It works!");
    }

};
const mymodule = require('mymodule.js');

mymodule.myfunction();
// It works!

可能是世界上所有搜索的重复,但我没有找到。非常感谢。如果不是这样?@chad,一个选项可能是编写javascript ES6并使用babel(或其他)生成ES5,然后使用旧的node运行。js.Object.assign一直是在spread操作符之前执行此操作的方法
module.exports=Object.assign({},require('./src/add'),require('./src/subtract'))