get-bin-path

Get the current package's binary path

Usage no npm install needed!

<script type="module">
  import getBinPath from 'https://cdn.skypack.dev/get-bin-path';
</script>

README

Codecov Build 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 { getBinPathSync } from 'get-bin-path'

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

test('Binary file should return "true"', async (t) => {
  const binPath = await getBinPath()
  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().

Usage

This returns the current package's binary absolute path:

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

const binPath = getBinPathSync()

This can be either synchronous or asynchronous:

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

const asyncFunc = async () => {
  const binPath = await getBinPath()
}

If there are several binaries, you can choose between them:

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

const binPath = getBinPathSync({ name: 'binary-name' })

The current directory can be overridden (for example with monorepos):

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

const binPath = getBinPathSync({ cwd: '/currentDirectory' })

When no package.json or binary can be found, undefined is returned instead.

getBinPathSync(options?)

options: object
Returns: string | undefined

getBinPath(options?)

options: object
Returns: Promise<string | undefined>

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.

This is useful when using monorepos.

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

💻