在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 }; }());