root-require
require() using a relative path from the root directory of the present module
Last updated 11 years ago by balderdashy .
MIT · Repository · Bugs · Original npm · Tarball · package.json
$ npm install root-require 
SYNC missed versions from official npm registry.

root-require

a more convenient require method for certain situations

How it do

This lets you require() using a relative path from the root directory of the present module.

Keep in mind require() is synchronous. And this library is not any more efficient-- (it uses fs.*Sync methods) Just like when you use require(), you should be fine as long as you're doing this at the top of your file outside of any function declarations.

Usage

Just once:

var Sails = require('root-require')('lib/app');

More than once:

var rootRequire = require('root-require');

var Sails = rootRequire('lib/app');
var Router = rootRequire('lib/router');
var MiddlewareLibrary = rootRequire('lib/middleware');

Why is this a good thing?

It's easier to reason about the structure of your module when the paths are consistent. The structure of your project becomes more declarative- dependencies are consistently referenced, irrespective of the user file's home in the directory structure.

Problems w/ require()

  1. When you move a dependency file (Ax) required by multiple files (Bi), you have to find/replace the all references to Ax. This is normally hard, because the argument to the require(...) function depends on where the user file (Bi) is located.
  2. When you move a file (Bx) which depends on another file (Ax), you normally have to update the require() call in Bx to reflect the new relative path from Bx to Ax.

e.g. Consider trying to change the path to giggle.js in an automated way:

hard

// foo.js
var Giggle = require('./wiggle/sniggle/giggle');

// bar.js
var Giggle = require('../../../../../wiggle/sniggle/giggle');

// baz.js
var Giggle = require('../../../../wiggle/sniggle/giggle');

// 20 more files like this, 100 other files like `giggle.js`

easy

// foo.js
var Giggle = require('root-require')('lib/wiggle/sniggle/giggle');

// bar.js
var Giggle = require('root-require')('lib/wiggle/sniggle/giggle');

// baz.js
var Giggle = require('root-require')('lib/wiggle/sniggle/giggle');

// 20 more files like this, 100 other files like `giggle.js`

Credit where credit is due

This module is literally a 3-line wrapper around the awesome packpath module (https://github.com/jprichardson/node-packpath). I just made this for convenience/ so I could have it in one line because I always forget how path.join works w/ Windows and all that.

License

MIT, c. 2014 Mike McNeil

Current Tags

  • 0.3.1                                ...           latest (11 years ago)

8 Versions

  • 0.3.1                                ...           11 years ago
  • 0.3.0                                ...           11 years ago
  • 0.2.0                                ...           11 years ago
  • 0.1.0                                ...           11 years ago
  • 0.0.4                                ...           11 years ago
  • 0.0.3                                ...           11 years ago
  • 0.0.2                                ...           11 years ago
  • 0.0.1                                ...           11 years ago
Maintainers (1)
Downloads
Total 4
Today 0
This Week 0
This Month 0
Last Day 0
Last Week 0
Last Month 0
Dependencies (1)
Dev Dependencies (0)
None
Dependents (2)

© 2010 - cnpmjs.org x YWFE | Home | YWFE