在Node.js中声明多个module.exports

我想要实现的是创build一个包含多个函数的模块。

module.js:

module.exports = function(firstParam) { console.log("You did it"); }, module.exports = function(secondParam) { console.log("Yes you did it"); }, // This may contain more functions 

main.js:

 var foo = require('module.js')(firstParam); var bar = require('module.js')(secondParam); 

我遇到的问题是firstParam是一个对象types, secondParam是一个URLstring,但是当我这样做的时候总是抱怨这个types是错误的。

如何在这种情况下声明多个module.exports?

你可以做一些事情:

 module.exports = { method: function() {}, otherMethod: function() {} } 

甚至只是:

 exports.method = function() {}; exports.otherMethod = function() {}; 

然后在调用程序中:

 var MyMethods = require('./myModule.js'); var method = MyMethods.method; var otherMethod = MyMethods.otherMethod; 

要导出多个函数,您可以像这样列出它们:

 module.exports = { function1, function2, function3 } 

然后在另一个文件中访问它们:

 var myFunctions = require("./lib/file.js") 

然后你可以通过调用每个函数来调用:

 myFunctions.function1 myFunctions.function2 myFunctions.function3 

这只是为了我的参考,因为我试图达到的目标可以通过这个来实现。

module.js

我们可以做这样的事情

  module.exports = function ( firstArg, secondArg ) { function firstFunction ( ) { ... } function secondFunction ( ) { ... } function thirdFunction ( ) { ... } return { firstFunction: firstFunction, secondFunction: secondFunction, thirdFunction: thirdFunction }; } 

main.js

 var name = require('module')(firstArg, secondArg); 

除了@mash答案我build议你总是做以下几点:

 const method = () => { // your method logic } const otherMethod = () => { // your method logic } module.exports = {method, otherMethod}; 

注意三件事情在这里:

  • 你可以从otherMethod调用method ,你将需要很多
  • 您可以根据需要快速隐藏某个方法
  • 对于大多数IDE来说,这是更容易理解和自动完成你的代码;)

您可以编写一个手动委托其他function之间的函数:

 module.exports = function(arg) { if(arg instanceof String) { return doStringThing.apply(this, arguments); }else{ return doObjectThing.apply(this, arguments); } }; 

你可以做的一个方法是在模块中创build一个新的对象,而不是replace它。

例如:

  var testone = function() { console.log('teste one'); }; var testTwo = function() { console.log('teste Two'); }; module.exports.testOne = testOne; module.exports.testTwo = testTwo; 

并致电

 var test = require('path_to_file').testOne: testOne(); 

用这个

 (function() { var exports = module.exports = {}; exports.yourMethod = function (success) { } exports.yourMethod2 = function (success) { } })(); 
 module.exports = (function () { 'use strict'; var foo = function () { return { public_method: function () {} }; }; var bar = function () { return { public_method: function () {} }; }; return { module_a: foo, module_b: bar }; }());