Run a script defined in a package.json
file (eg, vlt run
and lifecycle scripts), or an arbitrary command as if it was (eg, vlt exec
).
Usage
import { run, exec } from '@vltpkg/run'
const cwd = '/path/to/pkg'
// to run a script, as with `vlt run blah`const runResult = await run({ // the name of the thing in package.json#scripts event: 'build',
// the dir where the package.json lives cwd,
// if the script is not defined in package.json#scripts, just // ignore it and treat as success. Otherwise, treat as an // error. Default false. ignoreMissing: true,
// extra arguments to pass into the child process args: ['some', 'arguments'],
// the environment variables to add, defaults to process.env. // note that @vltpkg/run will add some of its own, as well: // - npm_lifecycle_event: the event name // - npm_lifecycle_script: the command in package.json#scripts // - npm_package_json: path to the package.json file // - VLT_* envs for all vlt configuration values that are set env: process.env,
// set this to `true` to take over the terminal and run in the // foreground, inheriting the parent process's stdio // by default, the script runs in the background. // Only one foreground:true script will be run in parallel! foreground: true,
// the shell to run the script in. Defaults to `${SHELL}` env // variable if set, otherwise the system specific shell, // `cmd.exe` on windows, and `/bin/sh` on posix. 'script-shell': '/usr/bin/bash',
// pass in a @vltpkg/package-json.PackageJson instance, and // it'll be used for reading the package.json file. Optional, // may improve performance somewhat. packageJson: new PackageJson(),})
// to execute an arbitrary command, as with `vlt exec whatever`const execResult = await exec({ // the command to execute. command: 'do-something', args: ['some', 'arguments'], // other arguments all the same.})