1.0.2 • Published 9 years ago

resolve-app-path v1.0.2

Weekly downloads
3
License
MIT
Repository
github
Last release
9 years ago

Application Path

NPM version Build Status Coverage Status Dependencies

Resolves an application's path.

Installation

$ npm install resolve-app-path

Usage

var resolve = require( 'resolve-app-path' );

resolve()

Resolves an application's path.

var root = resolve();
// returns <dirpath>

Notes

This module attempts the following strategies for resolving an application path:

  • When this module is a local module dependency, the module looks for an earliest ancestor node_modules directory, where we assume that the ancestor's parent is the application root. For example, given the following dependency chain

    /
    └── foo
        └── bar
            └── node_modules
                └── beep
                    └── node_modules
                        └── resolve-app-path
                            └── index.js

    the application root is /foo/bar.

  • When this module is loaded from a [global Node path](https://github.com/kgryte/node-global-paths), the module tries to find the nearest `package.json` walking up from the [current working directory](https://github.com/kgryte/utils-cwd). For example, given the following directory structure
    
    	```
    	/
    	└── Users
    	    └── <user>
    	        └── .node_modules
    	            └── resolve-app-root
    	                └── index.js
    	└── foo
    	    └── bar
    	        └── app
    	            └── root
    	                └── package.json
    	                └── bin
    	                    └── cli
    	```
    
    	and
    
    	``` bash
    	$ cd /foo/bar/app/root
    	$ node ./bin/cli
    	```
    
    	the application root is `/foo/bar/app/root`.
  • When an alternative dependency strategy is used, e.g., copy and paste or git submodule, where this module is not located in a node_modules directory, the module also attempts to find the nearest package.json walking up from the current working directory. For example, given the following directory structure,

    /
    └── foo
        └── bar
            └── app
                └── root
                    └── package.json
                    └── libs
                        └── resolve-app-root
                            └── index.js

    the application root is /foo/bar/app/root.

  • When none of the above methods resolve a root directory, the module uses require.main.filename as a fallback. For example, given the following directory structure,

    /
    └── foo
        └── bar
            └── app
                └── root
                    └── index.js
            └── resolve-app-root
                └── index.js

    where, in app/root/index.js,

    var root = require( './../../resolve-app-path' );

    and

    $ cd /foo/bar
    $ node ./app/root

    the application root is /foo/bar/app/root, as the main requiring file is index.js in /foo/bar/app/root.

Examples

var path = require( 'path' ),
	root = require( 'resolve-app-path' );

var parts = root().split( path.sep );
console.log( parts );

To run the example code from the top-level application directory,

$ node ./examples/index.js

Tests

Unit

Unit tests use the Mocha test framework with Chai assertions. To run the tests, execute the following command in the top-level application directory:

$ make test

All new feature development should have corresponding unit tests to validate correct functionality.

Test Coverage

This repository uses Istanbul as its code coverage tool. To generate a test coverage report, execute the following command in the top-level application directory:

$ make test-cov

Istanbul creates a ./reports/coverage directory. To access an HTML version of the report,

$ make view-cov

License

MIT license.

Copyright

Copyright © 2015. Athan Reines.