get-bin-path icon indicating copy to clipboard operation
get-bin-path copied to clipboard

Get the current package's binary path

get-bin-path logo

Codecov TypeScript Node Twitter Medium

Get the current package's binary path (using the package.json bin field).

This is useful when testing a package's binary. Using get-bin-path (as opposed to hard-coding the path to the binary):

  • validates that the package.json bin field is correctly setup.
  • decouples the binary path from the tests, which allows moving the file without rewriting the tests.

Examples

import { getBinPath } from 'get-bin-path'

// `binPath` is the absolute path to the current package's binary
const binPath = await getBinPath()
// Test runner
import test from 'ava'
// Library to execute child processes / commands
import { execa } from 'execa'
import { getBinPath } from 'get-bin-path'

const binPath = await getBinPath()

test('Binary file should return "true"', async (t) => {
  const { stdout } = await execa(binPath)
  t.is(stdout, 'true')
})

Install

npm install get-bin-path

This package is an ES module and must be loaded using an import or import() statement, not require().

API

getBinPath(options?)

options: object
Returns: Promise<string | undefined>

Returns the current package's binary absolute path. When no package.json or binary can be found, undefined is returned instead.

import { getBinPath } from 'get-bin-path'

const binPath = await getBinPath()

getBinPathSync(options?)

options: object
Returns: string | undefined

Same but synchronous.

import { getBinPathSync } from 'get-bin-path'

const binPath = getBinPathSync()

options

Type: object

options.name

Type: string
Default: package.json name property

Name of the binary. Only needs to be specified when the package exports several binaries.

options.cwd

Type: string
Default: Current directory

Override the current directory, which is used when retrieving the package.json.

See also

  • execa: process execution for humans

Support

For any question, don't hesitate to submit an issue on GitHub.

Everyone is welcome regardless of personal background. We enforce a Code of conduct in order to promote a positive and inclusive environment.

Contributing

This project was made with ❤️. The simplest way to give back is by starring and sharing it online.

If the documentation is unclear or has a typo, please click on the page's Edit button (pencil icon) and suggest a correction.

If you would like to help us fix a bug or add a new feature, please check our guidelines. Pull requests are welcome!

Thanks go to our wonderful contributors:


ehmicky

💻 🎨 🤔 📖

Daniel Stockman

💻

Kabir Baidhya

💻