npm 在哪里安装包?

Posted

技术标签:

【中文标题】npm 在哪里安装包?【英文标题】:Where does npm install packages? 【发布时间】:2011-08-21 01:33:55 【问题描述】:

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

【问题讨论】:

在 linux mint 上是 $HOME/.npm-global/lib/node_modules 大家都知道,没有-g 选项的安装会在您的工作目录中安装一个模块,例如如果你创建一个目录说~/Desktop/tmp然后cd ~/Desktop/tmp然后做npm install appium然后做ls你会看到node_modules package-lock.json因为你已经安装了一个节点模块appium到你的working directory...超级混乱因为-g 本质上应该是 default 但不是。 @the_prole - 谢谢,这非常有用 @the_prole 同意。绝对是虚拟的默认行为...谢谢提示。 npm config get prefix (***.com/a/32159233/2361131) 【参考方案1】:

全球图书馆

您可以运行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 的本地目录中找到它

【讨论】:

如果您使用的是 nvm,那么您的全局模块可能位于多个位置之一,具体取决于您当时使用的节点版本。最好的方法是按照另一个答案中的建议使用npm list -g 对我不起作用,只显示 bin 文件夹。 “npm root -g”确实有效。 在 Arch linux 下,全局模块在 /usr/lib 下。 "npm --help" 将确切位置显示为输出的最后一行,例如:npm@3.6.0 /usr/lib/node_modules/npm 对于windows 10,放在%USERPROFILE%\AppData\Roaming\npm\node_modules "npm root -g" 是正确的 - list 可能有效,但信息太多,而另一个命令只是为您提供您正在寻找的确切位置。 ***.com/a/24295332/174965【参考方案2】:

npm root 命令会告诉你你的 npm 包的有效安装目录。

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

示例:

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

See the documentation.

【讨论】:

【参考方案3】:

对于全局安装的模块:

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

当您使用 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 模块的平台默认安装路径。

【讨论】:

您回答了我的后续问题:“谁能告诉我如何更改 Node.js 模块的位置?” 注意:这对我来说很重要的原因是我不必再次更改我的 PATH。我取消注释了 npm config get prefx 打开的 npmrc 文件中的默认建议。【参考方案4】:

在 Windows 上,我使用 npm list -g 找到它。默认情况下,我的(全局)包被安装到C:\Users\[Username]\AppData\Roaming\npm

【讨论】:

仅供参考 - 这是执行用户的 %appdata%\npm【参考方案5】:

如果你正在寻找 npm 安装的可执行文件,可能是因为你想把它放在你的 PATH 中,你可以这样做

npm bin

npm bin -g

【讨论】:

如果你全局安装了 npm 包,其中 node 是用 homebrew 安装的,然后 npm 用 npm 本身更新,你可能会收到command not found 错误。如果是这样,请将以上内容添加到您的 PATH:export PATH=$PATH:$(npm bin -g) voila【参考方案6】:

不是直接回答,但可能会有所帮助....

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

【讨论】:

【参考方案7】:

如果模块安装时带有全局 (-g) 标志,您可以通过运行获取父位置:

npm get prefix

npm ls -g --depth=0

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

【讨论】:

【参考方案8】:

在早期版本的 NPM 模块中,总是放置在 /usr/local/lib/node 或您在 .npmrc 文件中指定 npm 根目录的任何位置。但是,在 NPM 1.0+ 中,模块安装在两个地方。您可以在 /.node_modules 中将模块安装到您的应用程序的本地,也可以将它们安装在全局范围内,这将使用上述内容。

更多信息请访问https://github.com/isaacs/npm/blob/master/doc/install.md

【讨论】:

需要注意的一点- 1.0 模块存储在 /usr/local/lib/node_modules 中。 @EricSmith 你的链接也坏了 答案中的链接已失效 - “404 | 找不到页面”.【参考方案9】:

要获得一个没有依赖关系的紧凑列表,只需使用

npm list -g --depth 0

【讨论】:

【参考方案10】:

最简单的方法是做

npm 列表 -g

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

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

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

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

【讨论】:

【参考方案11】:

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

npm list -g

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

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

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

npm list

【讨论】:

【参考方案12】:

我在搜索真实配置时开始发疯,所以这里是linux上所有配置文件的列表:

/etc/npmrc /home/youruser/.npmrc /root/.npmrc ./.npmrc 在 package.json 文件旁边的当前目录中(感谢@CyrillePontvieux)

在窗户上:

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 全局,但不会覆盖本地

这里是查找在哪里配置的内容所缺少的所有信息。希望我已经详尽无遗。

【讨论】:

/root/.npmrc 永远不应该被搜索,因为 sudonpm 是一种不好的做法,即使某些教程提到它。你忘了在package.json 文件旁边的目录中提到.npmrc【参考方案13】:

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

npm list -g

但是,如果您安装了大量 npm 软件包,则此命令的输出可能会很长并且向上滚动会非常痛苦(有时甚至无法向后滚动那么远)。

在这种情况下,将输出传递给more 程序,如下所示

npm list -g | more

【讨论】:

【参考方案14】:

回显配置:npm config lsnpm config list

显示所有配置设置:npm config ls -lnpm config ls --json

打印有效的node_modules文件夹:npm rootnpm root -g

打印本地前缀:npm prefixnpm prefix -g

(这是包含 package.json 文件或 node_modules 目录的最近父目录)


npm-config | npm Documentation npm-root | npm Documentation npm-prefix | npm Documentation

【讨论】:

【参考方案15】:

扩展其他答案。

npm list -g

将显示全局安装包的位置。

如果您想将该列表输出到一个文件中,您可以在文本编辑器中轻松搜索:

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

【讨论】:

【参考方案16】:

来自docs:

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

globally --- 这会将模块放入prefix/lib/node_modules,并将可执行文件放入prefix/bin,其中prefix 通常是 类似/usr/local。它还将手册页安装在 prefix/share/man,如果提供的话。

locally --- 这会将你的包安装在当前工作目录中。节点模块进入./node_modules,可执行文件进入 ./node_modules/.bin/,并且根本没有安装手册页。

您可以通过npm config get prefix 获取您的prefix。 (在使用 nvm 安装节点时很有用)。

【讨论】:

【参考方案17】:

Windows 10:当我运行 npm prefix -g 时,我注意到安装位置在我用来安装的 git shell 路径内。即使将该位置添加到路径中,来自全局安装包的命令也不会被识别。修复者:

    运行npm config edit 将前缀更改为 'C:\Users\username\AppData\Roaming\npm' 将该路径添加到系统路径变量中 使用 -g 重新安装软件包。

【讨论】:

谢谢先生,这是我遇到的真正问题【参考方案18】:

来自docs:

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

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

作用域包的安装方式相同,只是它们是分组的 一起在相关 node_modules 文件夹的子文件夹中 该范围前缀的名称由 @ 符号,例如npm 安装 @myorg/package 会将包放入 前缀/node_modules/@myorg/package.有关更多详细信息,请参见范围。

如果你想 require() 一个包,那么在本地安装它。

您可以通过npm config get prefix 获取您的prefix。 (在使用 nvm 安装节点时很有用)。

了解locally。 阅读globally。

【讨论】:

【参考方案19】:

在 Ubuntu 14.04 中,它们安装在

/usr/lib/node_modules

【讨论】:

【参考方案20】:

顺便说一句,如果在本地找不到,npm 将在父文件夹(直到非常根目录)中查找 node_modules。

【讨论】:

【参考方案21】:

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 列表,您可能需要有效地运行该项目。

【讨论】:

【参考方案22】:

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

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

还有npm cli 的工作方式@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))

其中globalPrefixec9fcc1/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 更新参考npm实现 现在情况不同了;您引入了平台(好)和相应的环境变量(尽管没有提及诸如 moduleName 之类的重要功能正在做什么,但我想普通读者将能够推断出来)。感谢您的修改/更正!【参考方案23】:

如果您安装了 Visual Studio,您会发现它带有自己的节点副本,与您自己安装节点时路径上的副本不同 - 我的位于 C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Microsoft\VisualStudio\NodeJs.

如果你在这个目录中运行 npm 命令,你会发现 Visual Studio 中安装了哪些节点模块。

【讨论】:

以上是关于npm 在哪里安装包?的主要内容,如果未能解决你的问题,请参考以下文章

“npm install -g <package>”在哪里安装包? [复制]

npm的.npmrc文件在哪里?缓存及全局包文件在什么位置?

包管理工具npm

npm学习之如何安装全局包更新全局安装的包卸载全局安装的包

nodejs npm 安装平台特定包

npm安装包出现UNMET DEPENDENCY报错