yarpm
v1.2.0
Published
CLI tool to run npm scripts with either npm, pnpm or yarn, depending on how it was started
Downloads
17,328
Maintainers
Readme
yarpm
Summary
A CLI tool to run npm scripts with either npm, pnpm or yarn, depending on how it was started. Useful for setups
where some team members use npm while others use pnpm or yarn, especially when Windows and Unix-like systems are
used across the team.
This tool is a helper to run scripts from package.json. Just substitute all npm, pnpm or yarn calls with yarpm
and you're good to go:
{
"scripts": {
"start": "yarpm run build",
"build": "tsc index.ts"
}
}When running the start script with yarn start, the dependent build script will be spawned with yarn:
~/test$ yarn start
yarn start v1.22.5
$ yarpm run build
$ tsc index.ts
✨ Done in 2.27s.Running the same script with npm start will result in the dependent build being run with npm:
~/test$ npm start
> [email protected] start /home/me/test
> yarpm run build
> [email protected] build /home/me/test
> tsc index.tsWhat this tool is not
This tool is not meant to be an abstraction layer for calling npm, pnpm or yarn. It will pass all arguments
it receives unfiltered to the chosen package manager. You'll have to make sure that the package manager commands you use
are compatible with all the package managers you want your commands to work with.
Installation
$ npm install yarpm --save-dev
# or
$ pnpm add yarpm --save-dev
# or
$ yarn add yarpm --devCLI Commands
The yarpm package provides 3 CLI commands:
The main command is yarpm.
yarpm
This command is an in-place substitute for places in package.json where npm, pnpm or yarn is being used
explicitly. It reads the npm_execpath environment variable to determine the path to the currently used package
manager. This env var is only set when running yarpm as a script. If yarpm is used without being embedded
in a script, it will always choose npm.
yarpm-pnpm
This command can be used in places where you are not in control of how your script is being started, for example when
using husky to run a script as a git hook. This script will always prefer pnpm over npm unless pnpm is not
available. Only then will it fall back to npm.
yarpm-yarn
This command can be used in places where you are not in control of how your script is being started, for example when
using husky to run a script as a git hook. This script will always prefer yarn over npm unless yarn is not
available. Only then will it fall back to npm.
Node API
The yarpm package provides a node API.
const yarpm = require('yarpm');
const promise = yarpm(argv, options);- argv
string[]-- The argument list to pass to npm/pnpm/yarn. - options
object|undefined- options.npmPath
string- The path to npm/pnpm/yarn. Default isprocess.env.npm_execpathif set,npmotherwise. - options.env
object- Sets the environment key-value pairs, replaces the default usage of process.env to spawn child process. - options.stdin
stream.Readable|null-- A readable stream to send messages to stdin of child process. If this isnullorundefined, ignores it. If this isprocess.stdin, inherits it. Otherwise, makes a pipe. Default isnull. Set toprocess.stdinin order to send from stdin. - options.stdout
stream.Writable|null-- A writable stream to receive messages from stdout of child process. If this isnullorundefined, cannot send. If this isprocess.stdout, inherits it. Otherwise, makes a pipe. Default isnull. Set toprocess.stdoutin order to print to stdout. - options.stderr
stream.Writable|null-- A writable stream to receive messages from stderr of child process. If this isnullorundefined, cannot send. If this isprocess.stderr, inherits it. Otherwise, makes a pipe. Default isnull. Set toprocess.stderrin order to print to stderr.
- options.npmPath
yarpm returns a promise will be resolved when the spawned process exits, regardless of the exit code.
The promise will be rejected in case of an internal error inside of yarpm.
The promise is resolved with an object with the following 2 properties: spawnArgs and code.
The spawnArgs property contains the array of parameters that were passed to spawn the sub-process.
The code property is the exit code of the sub-process.
yarpm(['install']).then((result) => {
console.log(`${result.spawnArgs} -- ${result.code}`);
// if executed as a package.json script via yarn: /usr/share/yarn/bin/yarn.js,install -- 0
});Changelog
https://github.com/BendingBender/yarpm/blob/master/CHANGELOG.md
Contributing
Clone the repo and make a pull request. Thank you for contributing!
Bug Reports or Feature Requests
Please use GitHub Issues.
