在Windows系统上,全局npm安装位置是什么?

146

我不完全确定,但我相信我在家里和办公室的电脑上都使用Windows安装程序安装了node v5。

在我的家用电脑上,全局安装发生在%APPDATA%下:

(dev) go|c:\srv> which lessc
c:\users\bjorn\appdata\roaming\npm\lessc
c:\users\bjorn\appdata\roaming\npm\lessc.cmd

当我在办公室电脑上时,它们会出现在“程序文件”下:

(dev) go|w:\srv> which lessc
c:\program files\nodejs\lessc
c:\program files\nodejs\lessc.cmd

我需要向PyCharm的文件监视器提供这些全局工具的完整路径,因为我分享的项目文件没有将全局资源放在用户文件夹下是有意义的。

为什么全局安装会出现在不同的文件夹中,我如何强制它们到所有团队成员共用的位置?


1
三年后,我遇到了一个类似的谜团。答案是node在c:\program files\nodejs创建了一个连接点,实际上指向%appdata%\nvm\v8.10.0。因此,它给人一种可能符合你所看到的错觉。 - John Hatton
1
c:\program files\nodejs的符号链接实际上是nvm的产物。 - John Hatton
7个回答

98
根据https://docs.npmjs.com/files/folders
本地安装(默认):将文件放在当前包根目录的./node_modules中。 全局安装(使用-g):将文件放在/usr/local或node安装的任何位置。 如果您要require()它,请在本地安装。 如果您要在命令行上运行它,请全局安装。-> 如果两者都需要,则在两个位置安装它,或使用npm link。
前缀配置: 前缀配置默认为node安装的位置。 在大多数系统上,这是/usr/local。 在Windows上,这是node.exe二进制文件的确切位置。
文档可能有点过时,但它们解释了为什么全局安装可能会以不同的目录结构结束:
(dev) go|c:\srv> npm config ls -l | grep prefix
; prefix = "C:\\Program Files\\nodejs" (overridden)
prefix = "C:\\Users\\bjorn\\AppData\\Roaming\\npm"

基于其他答案,看起来覆盖现在是Windows上的默认位置,我可能在实施此覆盖之前安装了我的办公室版本。
这也提供了一个解决方案,使所有团队成员将全局存储在相对于其PC的相同绝对路径中,即(以管理员身份运行):(在cmd中运行,而不是PowerShell!)
mkdir %PROGRAMDATA%\npm
setx PATH "%PROGRAMDATA%\npm;%PATH%" /M
npm config set prefix %PROGRAMDATA%\npm

打开一个新的cmd.exe窗口并重新安装所有全局包。

说明(按行号):

  1. 在合适的位置创建一个文件夹来保存全局包(Microsoft坚持认为您不应该写入ProgramFiles,因此%PROGRAMDATA%似乎是下一个合适的位置)。
  2. 目录需要在路径中,因此使用setx .. /M设置系统路径(在HKEY_LOCAL_MACHINE下)。这就要求您在具有管理员权限的shell中运行此命令。
  3. 告诉npm使用这个新路径。(注意:此shell中的文件夹在%PATH%中不可见,因此您必须打开一个新的窗口)。

1
警告:由于某些原因,命令 setx PATH "%PROGRAMDATA%\npm;%PATH%" /M 在 PowerShell 中不会添加新值,而是会替换所有内容。 - Rubens Mariuzzo
截至今天,Linux 的确切位置为:/usr/local/lib/node_modules - Dimitri Leite

75

如果您全局安装了一个包,这些是典型的npm路径:

Windows XP -             %USERPROFILE%\Application Data\npm\node_modules
Newer Windows Versions - %AppData%\npm\node_modules
or -                     %AppData%\roaming\npm\node_modules

1
嗯.. %APPDATA% 在用户文件夹下,而 PyCharm 似乎不接受环境变量,所以我猜这是行不通的。 - thebjorn
9
你的回答有误,请修正。 ~/AppData/Roaming/npm/node_modules $ npm /c/Users/Phil/AppData/Roaming/npm/npm: 第12行:node: 找不到命令。 - Philip Rego
通过 Powershell 全局安装软件包后,在 "$env:APPDATA\npm" 目录下创建了一个通用文件、一个 cmd_auto_file 文件和一个 Windows PowerShell Script 文件。 - Olov

26

只需按下Windows键并输入%APPDATA%,然后按enter键。

上面是你可以找到\npm\node_modules文件夹的位置。这是全局模块在你的系统中的存储位置。


1
如果您查看我的问题,您会发现您的断言是错误的。全局模块也可以安装在%PROGRAMFILES%\nodejs下,这是我的第一个问题(为什么它们在我家庭/办公电脑上的不同文件夹中结束?)。我的问题背景(如所述..)是我需要提供这些全局npm安装工具的路径给PyCharm IDE,以便其他团队成员从我正确设置它们中受益。由于(a)PyCharm在指定可执行文件时不允许使用环境变量,以及(b)%APPDATA%=c:\Users\bjorn\..,因此我无法在此处使用APPDATA。 - thebjorn

5

截至今天,全局安装的包(例如: npm i -g @vue/cli)默认存储在以下目录中:

C:\Users\<YourUserName>\AppData\Roaming\npm\node_modules

1
如果你只是想找出npm全局模块的安装位置(本主题的标题),请查看运行npm install -g sample_module时的输出。

$ npm install -g sample_module C:\Users\user\AppData\Roaming\npm\sample_module -> C:\Users\user\AppData\Roaming\npm\node_modules\sample_module\bin\sample_module.js + sample_module@5.1.0 updated 1 package in 2.821s


1
@thebjorn我认为你的问题标题不够具体,因此像我这样正在寻找npm安装位置而不是寻找如何更改它或为什么有不同文件夹的人会找到它。 - java-addict301
2
被接受的答案包含了你的问题的答案:npm config ls -l | grep prefix,即使没有,正确的做法也是提出一个新的更具体的问题... - thebjorn
1
如果你正在尝试找出在安装过程中全局模块被放置的位置(就像我的情况和可能会根据当前标题找到这个问题的其他人一样),那么这很重要。 - java-addict301
1
当然,您发现您的答案对 您自己 的问题(“npm -g在 我的 机器上安装了哪个软件包”)很有帮助。 然而,这是完全不同的问题,您应该删除此答案,提出一个新问题并自己回答它。 在一个三年以上的问题中添加随机事实并不正确。 此外,所有 之前的3个答案都提到了 %APPDATA% 路径,因此您甚至没有添加任何新内容..? - thebjorn
1
在Windows命令行中,应该输入> npm config ls -l | findstr prefix - undefined
显示剩余5条评论

-1
我使用 nvm 安装了 v14.9.0 版的 node,并在 D 盘找到它:D:\Users\<user_name>\AppData\Roaming\nvm\v14.9.0\node64.exe

-1

这是我在Windows上全局安装React的方法:

npm install -g react

然后我可以在以下路径看到已安装的包:

C:\Users\username\AppData\Roaming\npm\node_modules


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