【问题标题】:Node.js Combine module/exports from multiple filesNode.js 组合来自多个文件的模块/导出
【发布时间】: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));

【问题讨论】:

标签: javascript node.js module


【解决方案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));
      

      【讨论】:

        猜你喜欢
        • 2014-08-05
        • 2021-04-12
        • 2019-09-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多