You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					70 lines
				
				1.6 KiB
			
		
		
			
		
	
	
					70 lines
				
				1.6 KiB
			| 
								 
											3 years ago
										 
									 | 
							
								# find-root
							 | 
						||
| 
								 | 
							
								recursively find the closest package.json
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								[](https://travis-ci.org/js-n/find-root)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## usage
							 | 
						||
| 
								 | 
							
								Say you want to check if the directory name of a project matches its
							 | 
						||
| 
								 | 
							
								module name in package.json:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```js
							 | 
						||
| 
								 | 
							
								const path = require('path')
							 | 
						||
| 
								 | 
							
								const findRoot = require('find-root')
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// from a starting directory, recursively search for the nearest
							 | 
						||
| 
								 | 
							
								// directory containing package.json
							 | 
						||
| 
								 | 
							
								const root = findRoot('/Users/jsdnxx/Code/find-root/tests')
							 | 
						||
| 
								 | 
							
								// => '/Users/jsdnxx/Code/find-root'
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								const dirname = path.basename(root)
							 | 
						||
| 
								 | 
							
								console.log('is it the same?')
							 | 
						||
| 
								 | 
							
								console.log(dirname === require(path.join(root, 'package.json')).name)
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								You can also pass in a custom check function (by default, it checks for the
							 | 
						||
| 
								 | 
							
								existence of `package.json` in a directory). In this example, we traverse up
							 | 
						||
| 
								 | 
							
								to find the root of a git repo:
							 | 
						||
| 
								 | 
							
								```js
							 | 
						||
| 
								 | 
							
								const fs = require('fs')
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								const gitRoot = findRoot('/Users/jsdnxx/Code/find-root/tests', function (dir) {
							 | 
						||
| 
								 | 
							
								  return fs.existsSync(path.resolve(dir, '.git'))
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## api
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								### `findRoot: (startingPath : string, check?: (dir: string) => boolean) => string`
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Returns the path for the nearest directory to `startingPath` containing
							 | 
						||
| 
								 | 
							
								a `package.json` file, eg `/foo/module`.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								If `check` is provided, returns the path for the closest parent directory
							 | 
						||
| 
								 | 
							
								where `check` returns true.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Throws an error if no `package.json` is found at any level in the
							 | 
						||
| 
								 | 
							
								`startingPath`.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## installation
							 | 
						||
| 
								 | 
							
								```sh
							 | 
						||
| 
								 | 
							
								> npm install find-root
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## running the tests
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								From package root:
							 | 
						||
| 
								 | 
							
								```sh
							 | 
						||
| 
								 | 
							
								> npm install
							 | 
						||
| 
								 | 
							
								> npm test
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## contributors
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								- jsdnxx
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## license
							 | 
						||
| 
								 | 
							
								MIT. (c) 2017 jsdnxx
							 |