npm安装包的位置在哪里?

1477

请问我安装使用 npm 安装的 Node.js 模块文件在哪里可以找到?


4
在Linux Mint上,它是$HOME/.npm-global/lib/node_modules - Synxmax
52
为了让大家知道,如果没有使用-g选项安装模块,它将被安装到你的工作目录中。例如,如果你创建一个目录~/Desktop/tmp,然后运行cd ~/Desktop/tmp,再运行npm install appium,然后运行ls命令,你会看到node_modules package-lock.json,因为你已经在工作目录中安装了一个名为appium的Node模块... 这很让人困惑,因为-g本来应该是默认值,但实际上不是。 - the_prole
26
"npm config get prefix" 意为获取 npm 的安装目录路径。 - gawkface
3
当使用nvm来管理多个node版本时,它位于$HOME/.nvm/versions/node/v15.9.0/lib下,该目录将根据您使用的node版本而更改。有关nvm的更多信息,请参见https://github.com/nvm-sh/nvm/blob/master/README.md。如所选答案中所述,我使用`npm list -g | head -1`找到了此目录。 - PatS
23个回答

1595

全局库

您可以运行npm list -g以查看已安装的全局库及其位置。使用 npm list -g | head -1 以获取截断的输出,仅显示路径。如果要仅显示主包而不是随之安装的子包-您可以使用- npm list --depth=0,它将显示所有包,要获取仅全局安装的包,请添加-g,即 npm list -g --depth=0

在Unix系统上,它们通常位于全局安装时的/usr/local/lib/node/usr/local/lib/node_modules中。 如果将NODE_PATH环境变量设置为此路径,则Node可以找到这些模块。

Windows XP- %USERPROFILE%\AppData\npm\node_modules
Windows 7、8和10- %USERPROFILE%\AppData\Roaming\npm\node_modules

非全局库

非全局库安装在当前文件夹下的node_modules子文件夹中。

您可以运行npm list以查看当前位置的已安装非全局库。

安装时使用-g选项进行全局安装

npm install -g pm2 - pm2将被全局安装。然后,通常可以在/usr/local/lib/node_modules中找到它(使用npm root -g检查位置)。

npm install pm2 - pm2将被本地安装。然后,通常可以在/node_modules的本地目录中找到它。


40
如果您正在使用nvm,则全局模块可能会根据您当前使用的node版本而在几个位置之一。最好的方法是像另一个答案中建议的那样使用“npm list -g”。 - unscriptable
80
不起作用,只显示bin文件夹。 "npm root -g"可以正常工作。 - whitneyland
8
在Arch Linux下,全局模块位于/usr/lib目录下。 运行"npm --help"命令,可在输出的最后一行看到确切的位置,例如: npm@3.6.0 /usr/lib/node_modules/npm - Gregor
28
Windows 10 中,该文件应位于 %USERPROFILE%\AppData\Roaming\npm\node_modules - Nirmal Goswami
13
"npm root -g" 是正确的命令 - 列出所有信息可能过于冗长,而另一个命令则可以准确地提供您要查找的位置。 https://dev59.com/s2025IYBdhLWcg3wkW4F#24295332 - Adam Tolley
显示剩余6条评论

731

使用命令npm root可以告诉您npm软件包的有效安装目录。

如果您的当前工作目录是一个node软件包或node软件包的子目录,npm root会告诉您本地安装目录。npm root -g将显示全局安装根目录,而不管当前工作目录。

示例:

$ npm root -g
/usr/local/lib/node_modules

查看文档。


跟进问题:npm install -g 除了将这些文件移动到该位置之外(如果有影响,我正在使用Red Hat),是否还会执行chmod命令等其他操作?我正在尝试创建一个使用这些模块但不使用npm install(长故事)的Docker容器。 - Flotolk
如果你使用 nvm 的话会非常有帮助,因为你可以在每个节点版本上有多个位置,例如 ~/.nvm/versions/node/v14.20.0/lib/node_modules - joematune
如果您使用 nvm,会非常有帮助,因为您可能会有多个位置对应每个节点版本,例如 ~/.nvm/versions/node/v14.20.0/lib/node_modules - undefined

115

对于全局安装的模块:

其他答案可能会给出特定平台的回答,但是一般性的回答如下:

当您使用npm install -g something命令全局安装模块时,npm会查找配置变量prefix以了解要安装模块的位置。

您可以通过运行npm config get prefix命令获取该值。

要显示在该文件夹中可用的所有全局模块,请使用npm ls -g --depth 0(使用depth 0来不显示它们的依赖项)。

如果您想更改全局模块路径,请使用npm config edit并在文件中放置prefix = /my/npm/global/modules/prefix,或者使用npm config set prefix /my/npm/global/modules/prefix

当您使用一些工具,例如nodist时,它们会更改全局npm模块的默认安装路径。


3
你回答了我的追问:“有人能告诉我如何更改Node.js模块的位置吗?” 注:我之所以关心这个问题,是因为我不想再次更改我的PATH变量。我取消注释了npmrc文件中默认建议的命令“{npm config get prefix} opens”。 - HeyZiko

72
在Windows上,我使用npm list -g来查找它。默认情况下,我的(全局)软件包被安装在C:\Users\[用户名]\AppData\Roaming\npm目录下。

10
只是提供信息 - 这是执行用户的 %appdata%\npm。 - Felix

29

如果您正在寻找npm安装的可执行文件,可能是因为您想将其放入PATH中,那么您可以简单地执行以下操作:

npm bin
或者
npm bin -g

3
如果您在使用homebrew安装node时全局安装了npm包,并且之后使用npm自身更新了npm,那么您可能会收到“command not found”错误。如果是这样,请将上述内容添加到PATH环境变量中:export PATH=$PATH:$(npm bin -g) voila - Jakob Jingleheimer
6
v9.0.0 起,npm bin 已被移除。 - Aki K
有替代方案吗? - TheDiveO

24

如果使用全局 (-g) 标志安装了一个模块,你可以通过运行以下命令获取其父级位置:

npm list -g <module_name>

请注意,这将返回一个包含所有全局安装的模块的列表,因此你需要查找你要找的特定模块。

npm get prefix
或者
npm ls -g --depth=0

它将打印出位置和已安装模块列表。


22

虽然不是直接回答,但可能有所帮助……

npm还拥有一个缓存文件夹,可以通过运行npm config get cache命令(在Windows系统上为%AppData%/npm-cache)找到。

npm模块首先会下载到此处,然后复制到npm全局文件夹(在Windows系统上为%AppData%/Roaming/npm)或项目特定文件夹(例如your-project/node_modules)。

因此,如果您想跟踪npm软件包,并且以某种方式查看所有已下载的npm软件包列表(如果未清除npm缓存),请查看此文件夹。该文件夹结构如下:{cache}/{name}/{version}

这个链接也可能有所帮助:https://docs.npmjs.com/cli/cache


19
在 NPM 的早期版本中,模块总是被放置在 /usr/local/lib/node 或者你在 .npmrc 文件中指定的 npm 根目录位置。然而,在 NPM 1.0+ 版本中,模块被安装在两个地方。你可以在你的应用程序中局部安装模块,即 /.node_modules 目录下,或者全局安装模块,这将使用上述路径。
更多信息请参考 https://github.com/isaacs/npm/blob/master/doc/install.md

4
需要注意的是,在1.0版本中,模块存储在/usr/local/lib/node_modules目录下。 - Nick Campbell
@EricSmith,你的链接也坏了。 - nicolimo86
链接无效 - *"404 | 找不到页面"*。 - Pang

19

只需使用以下代码即可获取不包含依赖项的精简列表

npm list -g --depth 0

16

就像其他回答所说,最好的方法是做

npm list -g
然而,如果您安装了大量的npm包,那么此命令的输出可能会非常长,滚动屏幕查看将是一个很大的痛苦(有时甚至无法向上滚动那么远)。在这种情况下,请将输出导入到more程序中,像这样:
npm list -g | more

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接