2017-07-31 68 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

相關問題