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

Posted

技术标签:

【中文标题】安装后 NPX 在哪里存储二进制文件?【英文标题】:Where does NPX store binaries after installation? 【发布时间】:2021-07-05 18:46:33 【问题描述】:

如果我使用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 目录。但是我已经检查了这两个位置并没有看到新模块...

【问题讨论】:

usr/local/bin 不是 .bin 谢谢,我仍然没有在其中看到任何 npx 二进制文件。一切运行良好。只是好奇我的系统上的文件安装在哪里 可能在 ~/.cache 或 ~/.local 中? 试试这个:npx SOME_PACKAGE_WITH_BINARY_THAT_ISNT_INSTALLED_LOCALLY && find / -type f -name 'SOME_PACKAGE_WITH_BINARY_THAT_ISNT_INSTALLED_LOCALLYS_BINARY'. > 试试这个:npx SOME_PACKAGE_WITH_BINARY_THAT_ISNT_INSTALLED_LOCALLY && find / -type f -name 'SOME_PACKAGE_WITH_BINARY_THAT_ISNT_INSTALLED_LOCALLYS_BINARY' 改为:npx -p SOME_PACKAGE which SOME_PACKAGEnpx -p SOME_PACKAGE command -v SOME_PACKAGE。这将比使用find 在整个文件系统中搜索可执行文件要快得多。 【参考方案1】:

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
$ 

【讨论】:

以上是关于安装后 NPX 在哪里存储二进制文件?的主要内容,如果未能解决你的问题,请参考以下文章

有趣的npx

适用于 Linux (WSL) 的 Windows 子系统使用与 Windows 共享的 Node.js 安装:Node.js npm 和 npx 二进制文件不起作用

npx:一个npm包执行器

NEAR 协议中存储的智能合约 WebAssembly 二进制文件在哪里/如何?

protoc 在哪里以及如何安装它?

python读取文件操作文件放在哪里