在节点js中将多个文件导出为单个模块

时间:2017-07-31 01:43:51

标签: javascript node.js

以下是我尝试实现的一个简单示例:

foo.js:

module.exports.one = function(params) { */ stuff */ }

bar.js:

module.exports.two = function(params) { */ stuff */ }

stuff.js:

const foo = require('Path/foo');
const bar = require('Path/bar');

我想这样做:

otherFile.js:

stuff = require('Path/stuff');

stuff.one(params);
stuff.two(params);

我不想[在stuff.js]

module.exports = {
one : foo.one,
two: bar.two
}

我带来的解决方案是:

const files = ['path/foo', 'path/bar']

module.exports =   files
    .map(f => require(f))
    .map(f => Object.keys(f).map(e => ({ [e]: f[e] })))
    .reduce((a, b) => a.concat(b), [])
    .reduce((a, b) => Object.assign(a, b), {})

或更丑/更短:

module.exports = files
  .map(f => require(f))
  .reduce((a, b) => Object.assign(a, ...Object.keys(b).map(e => ({ [e]: b[e] }))));

感觉" hackish"。

有更清洁的方法吗?

2 个答案:

答案 0 :(得分:7)

它以这种方式工作:

<强> stuff.js

module.exports = Object.assign(
    {},
    require('./foo'),
    require('./bar'),
);

或支持Object Spread Operator

module.exports = {
    ...require('./foo'),
    ...require('./bar'),
};

<强> OtherFiles.js

var stuff = require('./stuff');

stuff.one();
stuff.two();

答案 1 :(得分:-1)

导入*来自&#34; Path&#34 ;;

从&#34;路径&#34;

导入{foo,bar}

你仍然可以在导出中做同样的事情。

导出函数foo(){}。

导出功能栏(){}