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. <[email protected]> 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 [email protected]
> To unsubscribe from this group, send email to
> [email protected]
> 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 [email protected].
> 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 [email protected]
To unsubscribe from this group, send email to
[email protected]
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 [email protected].
For more options, visit https://groups.google.com/groups/opt_out.