# run-versions

> Run a script across multiple versions of an npm package

Latest version **3.0.0** (published 2022-08-01) · MIT license · 0 weekly downloads

## Install

```sh
npm install run-versions
pnpm add run-versions
yarn add run-versions
bun add run-versions
```

## Health

**Score 15/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 3.0.0 |
| Published | 2022-08-01 |
| First published | 2015-06-29 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Node | >=14 |
| Dependencies | 4 |
| Unpacked size | 7.2 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 4 |
| Author | Ben Drucker |
| Maintainers | bendrucker |
| Keywords | versions, run, test, script, npm |

## Links

- npm: https://www.npmjs.com/package/run-versions
- Repository: https://github.com/bendrucker/run-versions
- Homepage: https://github.com/bendrucker/run-versions#readme
- Issues: https://github.com/bendrucker/run-versions/issues
- npm.io page: https://npm.io/package/run-versions

## Dependencies (4)

- [ap](https://npm.io/package/ap.md) ~0.2.0
- [xtend](https://npm.io/package/xtend.md) ~4.0.2
- [run-series](https://npm.io/package/run-series.md) ~1.1.9
- [spawn-npm-install](https://npm.io/package/spawn-npm-install.md) ~1.2.0

## Alternatives

- [duck](https://npm.io/package/duck.md) — 4.2M weekly downloads
- [ava](https://npm.io/package/ava.md) — 560.2K weekly downloads
- [storybook-addon-module-mock](https://npm.io/package/storybook-addon-module-mock.md) — 71.7K weekly downloads
- [vest](https://npm.io/package/vest.md) — 50.1K weekly downloads
- [@ethereum-waffle/mock-contract](https://npm.io/package/@ethereum-waffle/mock-contract.md) — 40.0K weekly downloads

## Recent versions

- 3.0.0 (latest) — 2022-08-01
- 2.0.0 — 2018-11-15
- 1.0.2 — 2015-06-30
- 1.0.1 — 2015-06-30
- 1.0.0 — 2015-06-29

## README

# run-versions

> Run a script across multiple versions of an npm package

## Install

```
$ npm install --save run-versions
```


## Usage

```js
var run = require('run-versions')
run({
  name: 'xtend',
  command: 'npm ls xtend',
  versions: ['3.0.0', '4.0.0']
}, done)
//=> done(null, [{version: '3.0.0', passed: true}, {version: '4.0.0', passed: true}])
```

## API

#### `run(options, callback)` -> `eventEmitter`

Iterates through the supplied versions, running the specified shell command at each version. For details on events, see the [events documentation](#events).

##### options

*Required*  
Type: `object`

Configuration objects for the runner:

###### name

*Required*  
Type: `string`

The name of the package to install.

###### command

*Required*  
Type: `string`

The command to run on each version.

###### versions

*Required*  
Type: `array[string]`

Versions to install and run against.

###### npm

Type: `boolean`  
Default: `false`

Set to `true` to treat the command as an npm script.

###### child_process

Type: `object`  
Default: `{}`

Options to pass to [spawned child processes](https://nodejs.org/api/child_process.html#child_process_child_process_spawn_command_args_options).

###### bail

Type: `boolean`  
Default: `false`

Call the callback immediately with an error if any test fails.

##### callback

*Required*  
Type: `function`  
Arguments: `err, results`

A callback to be called when the run completes. Installation errors are considered fatal, while test errors are only fatal when `options.bail` is set. 

###### results

Type: `array[object]`

An array of objects with properties *version* (string) and *passed* (boolean) indicating test results. 

## Events

A script runner is an `EventEmitter` and emits various events during its lifecycle. These events are:

* preinstall
* postinstall
* prescript
* postscript
* result
* preuninstall
* postuninstall

All events receive the current version as the first argument. *pre* events receive the child process used to execute the installation/script/uninstallation as the second argument. The *result* event receives the test result (pass/fail) as the second argument. *post* events receive only one argument.

```js
run(config, callback)
  .on('postinstall', function (version) {
    console.log('Installed', version)
  })
  .on('prescript', function (version, child) {
    child.stdout.pipe(process.stdout)
  })
```

Note that you can use `{stdio: 'inherit'}` in the `child_process` option if you'd prefer to pass through all output (install and uninstall logs), not just the script. 

## License

MIT © [Ben Drucker](http://bendrucker.me)

---
_Source: https://npm.io/package/run-versions · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
