On Thu, Jul 11, 2013 at 1:15 PM, Jake Verbaten <rayn...@gmail.com> wrote:
> E for everything! > > if your module needs to export multiple functions then use multiple E's > > ```js > var foo = require("module/foo") > foo() > > var bar = require("module/bar") > bar() > ``` > > This brings up another best practice. You should *always* include the extension when referring to a file (module), and only omit it when referring to a package (looking up the file in package.json's main property). require('module/foo.js'); // load a module within a package require('module'); // load a package's main module same thing works for local requires (which usually are non packages) require('./lib/foo.js'); though I sometimes put packages in my local tree require('./lib/bar'); // loads lib/bar/package.json and resolves to lib/bar/main.js > > On Thu, Jul 11, 2013 at 9:55 AM, Adam Crabtree <atcrabt...@gmail.com>wrote: > >> I also prefer E, but as a close second to A. >> >> I prefer A because in practice, your application modules evolve as your >> application grows in scope and understanding. So a "usermodel" may >> eventually also find it necessary to export utility functions like >> validation. In this case, ABCD are all more flexible, not requiring you to >> update all your requires everywhere. >> >> WRT ABCD, I consider A idiomatic JavaScript, but there are unresolved >> opinions like, do you capitalize factory functions or only constructors >> where instanceof works. Tim's point about instanceof failing across npm >> installs is accurate, but usually doesn't apply to application code (not >> installed via npm). I would at least rule out B though, as your functions >> should indicate in some way if they're intended to be used as a factory. >> >> Summary: A for constructors or factories, E for everything else. >> >> Cheers, >> Adam Crabtree >> >> >> On Thu, Jul 11, 2013 at 9:16 AM, Tim Caswell <t...@creationix.com> wrote: >> >>> 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. >>> >>> >>> >> >> >> >> -- >> Better a little with righteousness >> than much gain with injustice. >> Proverbs 16:8 >> >> -- >> -- >> 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. > > > -- -- 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.