Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/grimen/node-rootpath

Node.js project/package root path detection.
https://github.com/grimen/node-rootpath

auto-detect autodetect common detect node package-root package-root-path project-root project-root-path root root-path rootpath utility

Last synced: about 1 month ago
JSON representation

Node.js project/package root path detection.

Awesome Lists containing this project

README

        

# `node-rootpath` [![NPM version](https://badge.fury.io/js/%40grimen%2Frootpath.svg)](https://badge.fury.io/js/%40grimen%2Frootpath) [![Build Status](https://travis-ci.com/grimen/node-rootpath.svg?token=sspjPRWbecBSpceU8Jyn&branch=master)](https://travis-ci.com/grimen/node-rootpath) [![Coverage Status](https://codecov.io/gh/grimen/node-rootpath/branch/master/graph/badge.svg)](https://codecov.io/gh/grimen/node-rootpath)

*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**:

```bash
$ npm install @grimen/rootpath
```

Install using **yarn**:

```bash
$ 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

```javascript
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)

```javascript
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)

```javascript
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...

```sh
$ 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:

```sh
$ make install
```

Run **colorful tests** using **jest**:

```sh
$ make test
```

## Related

- [**`python-rootpath`**](https://github.com/grimen/python-rootpath) - *"Python project/package root path detection."*

## About

This project was mainly initiated - in lack of solid existing alternatives - to be used at our work at **[Markable.ai](https://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.