Besides simplicity, there are several reasons to simply export a function that accepts config options and returns an instance of the module.
- Instanceof is dangerous and doesn't work cross-context or if you have more than one copy of a module (something that's very common in the default behavior or npm) - If your module does one thing and one thing only, why expose that one thing as a property, just expose that one thing. - Don't oversimplify it to the point of `var foo = module` because then you have this weird almost singleton (remember there can be multiple instances of your module in somebody's dependency tree) - Pass in dependent interfaces in your setup function. For example, in jsgit I have an fs interface. To create an instance of it for node, you would do: var fs = require('simple-fs')('/my/base/path'); Then later I have a git database module that creates a real git repo on the filesystem. Instead of hard-coding a dependency on node's fs module, I pass in an instance of the git fs interface. That way the same code can work in the browser. var db = require('git-fs-db')(fs); Many of my modules are helper functions and so I export the function directly: var pushToPull = require('push-to-pull'); Then later when I have a codec implemented in push style, but I need to consume it pull style, I can do simply. var parse = pushToPull(require('git-pack-parse')); Keep it simple. As simple as possible, but no simpler. On Wed, Jul 10, 2013 at 5:39 PM, Andy W. <awillson...@gmail.com> wrote: > I have seen a wide variety in different style for creating custom Node > modules. What style do you prefer or are there any best practices? I'm > fairly new to the Node community. > > var module = require('module'); > > // A > var foo = new module.Foo(); > > // B > var foo = module.foo(); > > // C > var foo = module.createFoo(); > > // D > var foo = Module.Foo.create(); > > -- > -- > Job Board: http://jobs.nodejs.org/ > Posting guidelines: > https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines > You received this message because you are subscribed to the Google > Groups "nodejs" group. > To post to this group, send email to nodejs@googlegroups.com > To unsubscribe from this group, send email to > nodejs+unsubscr...@googlegroups.com > For more options, visit this group at > http://groups.google.com/group/nodejs?hl=en?hl=en > > --- > You received this message because you are subscribed to the Google Groups > "nodejs" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to nodejs+unsubscr...@googlegroups.com. > For more options, visit https://groups.google.com/groups/opt_out. > > > -- -- Job Board: http://jobs.nodejs.org/ Posting guidelines: https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines You received this message because you are subscribed to the Google Groups "nodejs" group. To post to this group, send email to nodejs@googlegroups.com To unsubscribe from this group, send email to nodejs+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/nodejs?hl=en?hl=en --- You received this message because you are subscribed to the Google Groups "nodejs" group. To unsubscribe from this group and stop receiving emails from it, send an email to nodejs+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.