安装后 NPX 将二进制文件存储在哪里?

Where does NPX store binaries after installation?

如果我一次性使用 npx 到 运行 二进制文件,它将输出以下内容:

npx my-module 

/// npx: installed 1 in 1.34s
/// Hello, from my module!

这些二进制文件默认存储在哪里? npx 是在执行后保存二进制文件 a-la npm 还是只是 运行 然后删除文件?

据我了解,npx 在下载模块之前会首先查看本地 node_modules/.bin 目录,然后查看 /usr/local/bin 目录。但是我已经检查了这两个位置,但没有看到新模块...

npm 版本 7 会将包缓存在 _npx 目录中。它有一个显然涉及哈希的缓存布局。例如,对我来说 npx shellcheck~/.npm/_npx/cca5ebdff9ce100b/node_modules/.bin/shellcheck 中安装可执行文件。 (注意 cca5ebdff9ce100b。)但是,我非常怀疑可以依赖该算法在 npx.

的各个版本之间保持一致

npx 的全部要点是您可以 运行 软件包而无需将它们永久安装在某个地方。所以我不会将该缓存位置用于任何事情。如果不时清除缓存条目,我不会感到惊讶。我不知道什么算法,如果有的话,npx 用于基于时间的缓存失效。

要获取 npx 运行 包的位置,您可以使用 -p 告诉它安装包,然后使用 which <executable>command -v <executable>获取路径。因此,例如,我在上面为获取 shellcheck 可执行文件的位置所做的是 运行 npx -p shellcheck which shellchecknpx -p shellcheck command -v shellcheck。这些命令假定使用 Linux 或其他类 UNIX 操作系统。我不确定 Windows 的等价物是什么。

$ 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
$