npm在哪里安装软件包?


977

有人可以告诉我在哪里可以找到使用我安装的Node.js模块npm吗?


3
在Linux mint上$HOME/.npm-global/lib/node_modules
Synxmax

9
只是让每个人都知道,没有安装-g选项将安装一个模块,您的工作目录,例如,如果你犯了一个目录执行的话~/Desktop/tmp,然后cd ~/Desktop/tmp再就npm install appium那么做ls,你会看到node_modules package-lock.json,因为你已经安装了一个节点模块appium到你的working directory...超级混乱,因为-g主要应的default,但不是。
–the_prole

2
@the_prole-谢谢,这非常有用
Fattie

Answers:


1141

全球图书馆

您可以运行npm list -g以查看安装了哪些全局库以及它们的位置。使用npm list -g | head -1用于显示人的路截断输出。如果您只想显示主软件包而不显示与其一起安装的子软件包(可以使用)npm list --depth=0,则可以使用- 将显示所有软件包并仅获取全局安装的软件包,只需添加-g ie即可npm list -g --depth=0

在Unix系统上,它们通常放在全局中/usr/local/lib/node/usr/local/lib/node_modules在全局中安装。如果将NODE_PATH环境变量设置为此路径,则可以按节点找到模块。

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_modulesnpm root -g用于检查位置)中找到它。

npm install pm2-pm2将在本地安装。然后通常会在本地目录中找到它。/node_modules


26
如果您使用的是nvm,则全局模块可能位于多个位置之一,具体取决于当时使用的节点版本。最好的方法是npm list -g按照另一个答案中的建议使用。
无法描述2014年

73
对我不起作用,仅显示bin文件夹。“ npm root -g”确实有效。
whitneyland's

7
在Arch linux下,全局模块在/ usr / lib下。“ npm --help”将确切位置显示为输出的最后一行,例如:npm@3.6.0 / usr / lib / node_modules / npm
Gregor,

20
对于Windows 10,放置在%USERPROFILE%\AppData\Roaming\npm\node_modules
Nirmal Goswami

11
“ npm root -g”是正确的-列表可能有效,但信息太多,因为其他命令仅提供了您要查找的确切位置。 stackoverflow.com/a/24295332/174965
亚当·托利

581

该命令npm root将告诉您npm软件包的有效安装目录。

如果当前工作目录是节点软件包或节点软件包的子目录,npm root则会告诉您本地安装目录。npm root -g无论当前工作目录如何,都会显示全局安装根目录。

例:

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

请参阅文档。


1
对此答案+1(至少在Linux Mint 17 Qianna和npm 3.9.5下)。我的全局node_modules文件夹在中/usr/local/lib/node_modules。当我这样做时sudo npm uninstall browserify -g(假设我以前做过sudo npm install browserify -g),它将从那里删除。
nik_m '16

10
这是一个非常有用的答案,因为输出适合于编写较大的命令,而无需从一堆输出中提取路径。
亚当·托利

2
Windows操作系统上的默认根目录为C:\ Users \ YOUR_USER_NAME \ AppData \ Roaming \ npm \ node_modules
Vincent Tang

2
对于MacOS Mojave 10.14.5,它也是/usr/local/lib/node_modules
Jim Aho

89

对于全局安装的模块:

其他答案为您提供特定于平台的响应,但是通用的答案是:

当使用来安装全局模块时npm install -g something,npm会查找一个配置变量prefix以知道该模块的安装位置。

您可以通过运行获得该值 npm config get prefix

要显示该文件夹中所有可用的全局模块,请使用npm ls -g --depth 0depth 0不显示其依赖性)。

如果要更改全局模块路径,请使用npm config edit并放入prefix = /my/npm/global/modules/prefix文件或使用npm config set prefix /my/npm/global/modules/prefix

当您使用诸如nodist之类的工具时,它们会更改全局npm模块的平台默认安装路径。


2
您回答了我的后续问题:“有人可以告诉我如何更改 Node.js模块的位置吗?” 注意:这对我很重要的原因是,这样我就不必再次更改PATH。我没有评论npmrc文件中打开{npm config get prefx}的默认建议。
HeyZiko

“当您使用诸如nodist之类的工具时,它们会更改全局npm模块的平台默认安装路径。” +1
Jim Aho

65

在Windows上,我曾经npm list -g发现过它。默认情况下,我的(全局)软件包已安装到C:\Users\[Username]\AppData\Roaming\npm


9
仅供参考-这是执行用户的%appdata%\ npm
Felix

19

如果您正在寻找npm安装的可执行文件,也许是因为您想将其放在PATH中,则只需执行以下操作

npm bin

要么

npm bin -g

如果您已经全局安装了npm软件包,其中节点是使用自制软件安装的,然后使用npm本身更新了npm,则可能会command not found出现错误。如果是这样,请将以上内容添加到您的路径中:export PATH=$PATH:$(npm bin -g)
jacob

18

在早期版本的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中。
尼克·坎贝尔,

@EricSmith您的链接也断开了
nicolimo86

16

没有直接的答案,但可能会有所帮助。

npm还具有一个缓存文件夹,可以通过运行npm config get cache%AppData%/npm-cache在Windows上)找到该文件夹。

首先在此处下载npm模块,然后将其复制到npm全局文件夹(%AppData%/Roaming/npm在Windows上)或项目特定的文件夹(your-project/node_modules)中。

因此,如果您想跟踪npm软件包(以及某些方法),则所有下载的npm软件包的列表(如果未清除npm缓存)都可以查看此文件夹。文件夹结构如下{cache}/{name}/{version}

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


14

如果模块安装了全局(-g)标志,则可以通过运行以下命令来获取父位置

npm get prefix

要么

npm ls -g --depth=0

它将打印位置以及已安装模块的列表

欢呼声:-)


13

最简单的方法是

npm列表-g

列出软件包并查看其安装位置。

我已经通过chololatey安装了npm,所以位置是

C:\ MyProgramData \ chocolatey \ lib \ nodejs.commandline.0.10.31 \ tools \ node_modules

C:\ MyProgramData \是巧克力回购位置。



6

您可以通过以下命令找到全局安装的模块

npm list -g

它将为您提供安装node.js模块的位置。

C:\Users\[Username]\AppData\Roaming\npm

如果将node.js模块本地安装在文件夹中,则可以键入以下命令以查看位置。

npm list

4

文档

在npm 1.0中,有两种安装方式:

  • 全局—将模块放入其中{prefix}/lib/node_modules,并将可执行文件放入{prefix}/bin其中{prefix},通常类似于/usr/local{prefix}/share/man如果提供了手册页,还将在中安装手册页 。

  • 本地—将软件包安装在当前工作目录中。节点模块进入./node_modules,可执行文件进入 ./node_modules/.bin/,并且根本没有安装手册页。

你可以让你{prefix}npm config get prefix。(在使用nvm安装节点时很有用)。


3

文档

程序包将放在前缀下的node_modules文件夹中。在本地安装时,这意味着您可以require(“ packagename”)加载其主模块,或require(“ packagename / lib / path / to / sub / module”)加载其他模块。

在Unix系统上,全局安装位于{prefix} / lib / node_modules。Windows上的全局安装转到{prefix} / node_modules(即没有lib文件夹)。

有作用域的软件包以相同的方式安装,只不过它们在相关的node_modules文件夹的子文件夹中分组在一起,该子文件夹的作用域名称以@符号表示,例如npm install @ myorg / package会将软件包放置在{prefix}中。 / node_modules / @ myorg / package。有关更多详细信息,请参见范围。

如果您需要require()软件包,请在本地安装。

你可以让你{prefix}npm config get prefix。(在使用nvm安装节点时很有用)。

了解本地信息
阅读有关全球的内容



3

我开始发疯寻找真正的配置,所以这是Linux上所有配置文件的列表:

  • / etc / npmrc
  • / home /您的用户/.npmrc
  • /root/.npmrc

在Windows上:-c / Program \ Files / nodejs / node_modules / npm / npmrc

然后在文件中配置前缀:

prefix=/usr

前缀在Linux中默认为/ usr,在Windows中默认为$ {APPDATA} \ npm

节点模块在$ prefix树下,并且路径应包含$ prefix / bin

可能有问题:

  • 在全局安装时,请使用“ sudo su”,然后才/root/.npmrc可以使用!
  • 当您使用本地没有sudo:您的用户其/home/youruser/.npmrc
  • 当您的路径不代表您的前缀时
  • 使用npm set -g prefix /usr它时,将其设置为/ etc / npmrc全局,但不会覆盖本地

这是找不到在何处配置的所有信息。希望我已经穷尽了。


2

正如其他答案所说,最好的方法是

npm list -g

但是,如果您安装了许多npm软件包,则此命令的输出可能会很长,并且向上滚动非常麻烦(有时甚至无法向后滚动)。

在这种情况下,将输出通过管道传输到more程序中,如下所示

npm list -g | more

2

Windows 10:运行时npm prefix -g,我注意到安装位置在我以前安装的git shell路径内。即使将该位置添加到路径中,也无法识别来自全局安装软件包的命令。固定于:

  1. 跑步 npm config edit
  2. 将前缀更改为“ C:\ Users \用户名\ AppData \ Roaming \ npm”
  3. 将该路径添加到系统路径变量中
  4. 用-g重新安装软件包。

2

扩展其他答案-

npm list -g

将向您显示全局安装的软件包的位置。

如果要将列表输出到文件,然后可以在文本编辑器中轻松搜索:

npm list -g > ~/Desktop/npmfiles.txt



1

如果您尝试从代码访问全局目录,则可以从进行回溯process.execPath。例如,要查找wsproxy位于中的{NODE_GLOBAL_DIR}/bin/wsproxy,您可以:

path.join(path.dirname(process.execPath), 'wsproxy')

还有如何npmCLI作品@ ec9fcc1/lib/npm.js#L254有:

path.resolve(process.execPath, '..', '..')

另请参阅ec9fcc1/lib/install.js#L521

var globalPackage = path.resolve(npm.globalPrefix,
                                 'lib', 'node_modules', moduleName(pkg))

globalPrefix在一组默认ec9fcc1/lib/config/defaults.js#L92-L105的:

if (process.env.PREFIX) {
    globalPrefix = process.env.PREFIX
} else if (process.platform === 'win32') {
    // c:\node\node.exe --> prefix=c:\node\
    globalPrefix = path.dirname(process.execPath)
} else {
    // /usr/local/bin/node --> prefix=/usr/local
    globalPrefix = path.dirname(path.dirname(process.execPath))

    // destdir only is respected on Unix
    if (process.env.DESTDIR) {
        globalPrefix = path.join(process.env.DESTDIR, globalPrefix)
    }
}

这应该如何工作?例如,Node二进制文件位于/usr/bin/node,但是显然(因为这是bin)模块不存在;相反,他们在/usr/lib/node_modules
Florian Rappl

参照更新npm执行
AT

现在这是另一个故事了;您引入了平台(好的)和相应的env变量(尽管没有提到模块名之类的重要功能在做什么,但是我想普通读者可以推断出这一点)。感谢您的修改/更正!
Florian Rappl

1

如果已安装Visual Studio,则将发现它带有自己的节点副本,该副本与您自己安装节点时路径上的副本分开-我的文件夹位于C:\ Program Files(x86)\ Microsoft Visual Studio \ 2019中\ Community \ MSBuild \ Microsoft \ VisualStudio \ NodeJs。

如果从此目录中运行npm命令,则会发现Visual Studio中安装了哪些节点模块。


0

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

注意:如果您在文件夹中的某个位置,cd ..请先进入C:目录。然后,键入cd %USERPROFILE%\AppData\Roaming\npm\node_modules。并且,神奇地%USERPROFILE%将变为Users\YourUserProfile\。我只想澄清Decko第一反应中提到的想法。npm list -g将列出您全局安装的所有位。如果你需要找到你的项目相关的npm package,然后cd 'your angular project xyz',再运行npm list。它将在中显示模块列表npm package。它还将为您提供dependencies缺少的列表,并且您可能需要有效地运行该项目。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.