npm
version 7 will cache the packages in a _npx
directory. It has a cache layout that apparently involves a hash. For example, for me npx shellcheck
installs the executable in ~/.npm/_npx/cca5ebdff9ce100b/node_modules/.bin/shellcheck
. (Note the cca5ebdff9ce100b
.) However, I very much doubt that the algorithm can be relied upon to be consistent across versions of npx
.
The whole point of npx
is that you can run the packages without installing them somewhere permanent. So I wouldn't use that cache location for anything. I wouldn't be surprised if cache entries were cleared from time to time. I don't know what algorithm, if any, npx
uses for time-based cache invalidation.
To get the location from which npx
runs the package, you can use -p
to tell it to install a package and then use which <executable>
or command -v <executable>
to get the path. So, for example, what I did above to get the location of the shellcheck
executable was to run npx -p shellcheck which shellcheck
or npx -p shellcheck command -v shellcheck
. Those commands assume a Linux or other UNIX-like operating system. I'm not sure what the equivalent for Windows would be.
$ npx -p shellcheck command -v shellcheck
Need to install the following packages:
shellcheck
Ok to proceed? (y)
/Users/trott/.npm/_npx/cca5ebdff9ce100b/node_modules/.bin/shellcheck
$
npx SOME_PACKAGE_WITH_BINARY_THAT_ISNT_INSTALLED_LOCALLY && find / -type f -name 'SOME_PACKAGE_WITH_BINARY_THAT_ISNT_INSTALLED_LOCALLYS_BINARY'
. – Blendnpx -p SOME_PACKAGE which SOME_PACKAGE
ornpx -p SOME_PACKAGE command -v SOME_PACKAGE
. That will be much faster than usingfind
to search through the entire filesystem for the executable. – Chassepot