On Tue, Apr 22, 2014 at 01:08:52AM -0700, Chetan Dhembre wrote:
> I end up looking their directory structure which is more or less nested .. i
> find following code
>
> var fs = require('fs'),
> > config = require('../../server/config')
> >
>
> which requiring local module using relative path and there is no second
> thought is this is error prone.
I don't see this as problematic: If you're not burying requires in late,
conditional code (which is an antipattern because blocking the runtime is no
fun), you'd discover this error early, if you make it at all.
It DOES require a paradigim shift if you're used to something like a PHP
autoloader, where location is irrelevant, or something like Java's import that
abstracts away from the notion of directories to some degree, but I don't think
it introduces any new kinds of breakage.
In this specific case, perhaps your module should have its configuration
injected by what requires it, rather than requiring its own configuration:
var fs = require('fs');
module.exports = function myModule(config) {
};
And where it's assembled:
var config = require('./server/config');
var mod = require('./modules/myModule.js')(config);
I think re-arranging to make your dependencies be both a directed, acyclic
graph (which it is now for you, since config doesn't require further things)
and making the directory structure map to that 1:1 as much as possible, you'll
find that things are easier to keep straight and you'll build less
interdependency.
> My question how does other large project manage code .. because there so
> many small piece code which are closely related to project so can not
> publish on npm and creating that number or private repo is not financially
> feasible (talking about github)
>
> Can any one tell how people manage large code base ?
Break things up into small modules -- commit them in node_modules, or isolate
them into better groups (so you don't have to do deep requires). If github's
pricing model bites you, consider using your own git repositories. A simple
http server will suffice, as will a git daemon.
It may in fact be a sign that you're designing something too tightly coupled
and you need to refactor better shapes.
Aria
pgp5s1gWGVDc6.pgp
Description: PGP signature
