fuzz-run
v3.0.0
Published
Run all your NPM scripts more easily with fuzzy matching
Downloads
657
Maintainers
Readme
:runner: fuzz-run
Run all your NPM scripts more easily with fuzzy matching.
Features:
- Fuzzy matching of NPM script name, optimized for commands (see alternatives)
- Yarn and PNPM support: automatically detect the package manager used and adapt commands accordingly
- No need for
--
to pass extra options when using NPM - Extra actions for common recurrent tasks
Installation
npm install -g fuzz-run
CLI Usage
Usage: fr <fuzzy_script_name>|<action> [script_options]
Actions:
-u, --update Show outdated packages and run an interactive update
-r, --refresh Delete node_modules and lockfile, and reinstall packages
If no arguments are provided, it will list all available scripts.
As the name of the script to run is fuzzy matched, you can try:
- typing only some letters of the script name, regardless of their position (first letters weights more), like
t
fortest
script - typing first letter of compound script names like
tc
fortest:ci
script - making some typos, like
ets
fortest
script
Note that you can use the alias nr
(for npm run) instead of fr
(fuzz run) if you prefer :wink:
You can pass any arguments to your script if needed, like fr t --coverage
. You don't need to use --
to pass extra options to your script like when using npm
directly.
Actions
There are a few scripted actions you can use for common day-to-day tasks in your projects:
-u
or--update
: It will show outdated packages, then ask if you want to update. If you accept, it will first update all package within their allowed range according to yourpackage.json
usingnpm update
,pnpm update
oryarn upgrade
. Then it will run an interactive update, using under the hoodnpx npm-check -u
if NPM or PNPM is your package manager oryarn upgrade-interactive
if you use Yarn.-r
or--refresh
: It will deletenode_modules
folder and lockfile, and reinstall all your packages. I probably use that more than I should, but it's always a handy fix.
Package manager
Supported package managers are NPM, Yarn and PNPM.
By default, your package manager will be autodetected based on your project's lockfile format, and corresponding commands will be used.
You can also force a package manager by setting the NODE_PACKAGE_MANAGER
environment variable.
API
You can also integrate this script runner in your own CLI by using the function fuzzyRun(args, packageManager)
:
args
: array of arguments, the same you would use for the CLI usagepackageManager
: optional, can be'npm'
,'yarn'
or'pnpm'
to force a specific command to run the scripts. Ifnull
orundefined
, it will be autodetected based on your project's lockfile format.
Example:
const fuzzyRun = require('fuzzy-run');
fuzzyRun(process.argv.slice(2));
Alternatives
Why making a new tool when some other exists, you might ask?
Both are based on fuse.js for the fuzzy matching, which is not great for matching commands, as it doesn't weight properly specific features like subcommands separation (using characters like -
, _
, :
) or first character of words :disappointed:
Some examples:
- if you have 2 scripts
test
andtest:ci
, typingtc
matchestest
instead oftest:ci
- if you have 2 scripts
test:ci
andother
, typingt
matchesother
So I benchmarked many fuzzy matching libraries, and kept the best one I found suited for the job, fuzzysort, that solves these issues.