2017-07-31 89 views
4

这里是我想要实现一个简单的例子:导出多个文件作为单个模块中节点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”。

有没有更干净的方法来做到这一点?

回答

4

它的工作原理是这样的:

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

import * as“stuff”from“Path”;

进口从 “路径”

{FOO,酒吧}你仍然可以做同样的出口。

导出函数foo(){}。

出口函数bar(){}

+0

该OP没有使用ES6转换器。 – 2017-07-31 02:09:25

相关问题