# 🌐 Environment
## Current directory
The [current directory](https://en.wikipedia.org/wiki/Working_directory) when running the command can be set with the [`cwd`](api.md#optionscwd) option.
```js
import {execa} from 'execa';
await execa({cwd: '/path/to/cwd'})`npm run build`;
```
And be retrieved with the [`result.cwd`](api.md#resultcwd) property.
```js
const {cwd} = await execa`npm run build`;
```
## Local binaries
Package managers like `npm` install local binaries in `./node_modules/.bin`.
```sh
$ npm install -D eslint
```
```js
await execa('./node_modules/.bin/eslint');
```
The [`preferLocal`](api.md#optionspreferlocal) option can be used to execute those local binaries.
```js
await execa({preferLocal: true})`eslint`;
```
Those are searched in the current or any parent directory. The [`localDir`](api.md#optionslocaldir) option can select a different directory.
```js
await execa({preferLocal: true, localDir: '/path/to/dir'})`eslint`;
```
## Current package's binary
Execa can be combined with [`get-bin-path`](https://github.com/ehmicky/get-bin-path) to test the current package's binary. As opposed to hard-coding the path to the binary, this validates that the `package.json` [`bin`](https://docs.npmjs.com/cli/v10/configuring-npm/package-json#bin) field is correctly set up.
```js
import {execa} from 'execa';
import {getBinPath} from 'get-bin-path';
const binPath = await getBinPath();
await execa(binPath);
```
## Background subprocess
When the [`detached`](api.md#optionsdetached) option is `true`, the subprocess [runs independently](https://en.wikipedia.org/wiki/Background_process) from the current process.
Specific behavior depends on the platform. [More info.](https://nodejs.org/api/child_process.html#child_process_options_detached)
```js
await execa({detached: true})`npm run start`;
```
[**Next**: ❌ Errors](errors.md)\
[**Previous**: 🐢 Node.js files](node.md)\
[**Top**: Table of contents](../readme.md#documentation)