node-rootpath

0.1.1 • Public • Published

node-rootpath NPM version Build Status Coverage Status

Node.js project/package root path detection.

Introduction

Auto-magic project/package root path detection - from a child module file for Node.js libraries/projects.

It does this by detecting typical package/project root files/folders (e.g. .git, package.json, etc.), but it can also be overriden easily if needed.

Install

Install using npm:

$ npm install @grimen/rootpath

Install using yarn:

$ yarn add @grimen/rootpath

Use

Detect a project/package root path:

1. Assuming we have a Node.js library/application project...

/home/me/projects
    └── node-foo
            └── foo
                └── utils
                    └── __init__.js
                    └── baz.js
                    └── say.js
                └── __init__.js
                └── bar.js
            README.md
            package.json
            setup.js

foo/bar.js - top level package module

const assert = require('assert')

const rootpath = require('@grimen/rootpath')

async function bar () {
    const path = await rootpath.detect()

    assert(path === '/home/me/projects/node-foo')

    console.log('---')
    console.log('FILE:', __filename)
    console.log('ROOT:', path)
    console.log('---')
}

if (require.main === module) {
    bar()
}

foo/utils/baz.js - nested level package module (dependency)

const assert = require('assert')

const rootpath = require('@grimen/rootpath')

async function baz () {
    const path = await rootpath.detect()

    assert(path === '/home/me/projects/node-foo')

    console.log('---')
    console.log('FILE:', __filename)
    console.log('ROOT:', path)
    console.log('---')
}

if (require.main === module) {
    baz()
}

foo/utils/say.js - nested level package module (dependency)

const assert = require('assert')

const rootpath = require('@grimen/rootpath')

async function say () {
    const path = rootpath.detect()

    console.log('---')
    console.log(`SAY: ${path}`)
    console.log('---')
}

if (require.main === module) {
    say()
}

2. Let's run the files individually - they should both with successful assertions and output accurately detected root paths...

$ cd /home/me/projects/node-foo

$ node ./foo/bar.js

---
FILE: /home/me/projects/node-foo/foo/bar.js
ROOT: /home/me/projects/node-foo
---

$ node ./foo/utils/baz.js

---
FILE: /home/me/projects/node-foo/foo/utils/baz.js
ROOT: /home/me/projects/node-foo
---

$ node ./foo/utils/say.js

---
SAY: /home/me/projects/node-foo
---

Test

Clone down source code:

$ make install

Run colorful tests using jest:

$ make test

Related

About

This project was mainly initiated - in lack of solid existing alternatives - to be used at our work at Markable.ai to have common code conventions between various programming environments where Node.js (for I/O heavy operations) is heavily used.

License

Released under the MIT license.

Readme

Keywords

none

Package Sidebar

Install

npm i node-rootpath

Weekly Downloads

3

Version

0.1.1

License

MIT

Unpacked Size

15.3 kB

Total Files

33

Last publish

Collaborators

  • grimen