Windows上的全局npm安装位置?


80

我不确定100%,但是我相信我是从家用计算机和办公室PC上的Windows安装程序安装了节点v5。

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

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

在我的办公室PC上,它们位于程序文件下:

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

我需要为PyCharm的文件监视程序提供许多这些全局工具的完整路径,并且由于我共享的项目文件很有意义,因此在用户文件夹下没有全局资源。

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


3年后,我也有一个类似的谜。答案是,该节点在c:\ program files \ nodejs处创建了一个结点,该结点实际上指向%appdata%\ nvm \ v8.10.0。因此,它给出了可能适合您所见的幻觉。
约翰·哈顿

1
c:\ program files \ nodejs符号链接原来是nvm的产物
John Hatton

Answers:


63

根据:https : //docs.npmjs.com/files/folders

  • 本地安装(默认):将内容放入当前软件包根目录的./node_modules中。
  • 全局安装(带有-g):将内容放入/ usr / local或安装节点的任何位置。
  • 如果您需要require(),请在本地安装。
  • 如果要在命令行上运行它,请全局安装它。->如果两者都需要,则将其安装在两个地方,或使用npm链接。

前缀配置

前缀config默认为节点安装的位置。在大多数系统上,这是/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上的默认位置,并且在实施替代之前我可能已经安装了Office版本。

这也提出了一种解决方案,使所有团队成员将全局变量存储在相对于其PC的相同绝对路径中,即(以管理员身份运行):

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%中不可见,因此必须打开一个新窗口)。

警告:由于某些原因,该命令setx PATH "%PROGRAMDATA%\npm;%PATH%" /M不会在前面加上新值,而是会替换所有内容(在PowerShell中)。
鲁本斯·马里努佐

45

如果您全局安装软件包,这些是典型的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

7
这是错误的解决方法〜/ AppData / Roaming / npm / node_modules $ npm / c / Users / Phil / AppData / Roaming / npm / npm:第12行:节点:找不到命令
Philip Rego

16

只需按Windows按钮并键入%APPDATA%,然后按Enter。

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


1
如果您看我的问题,您会发现您的断言是错误的。全局模块也可以安装在下%PROGRAMFILES%\nodejs,这是我的第一个问题(为什么它们最终放在我的家用/办公PC上的不同文件夹中?)。我的问题的上下文(如上所述)是,我需要为PyCharm IDE提供这些全局npm安装工具的路径,以便其他团队成员从我那里受益,以便为我们的项目正确设置它。由于(a)PyCharm在指定可执行文件时不允许使用env vars,并且(b)在此%APPDATA%=c:\Users\bjorn\..我不能使用APPDATA。
thebjorn

-2

如果您只是想找出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在2.821秒内更新了1个程序包


问题是整个问题,而不仅仅是标题。我认为这不是我的问题的答案。
thebjorn

@thebjorn我认为您的问题标题不够具体,因此像我这样的人会在寻找npm安装位置而不是寻找如何更改它或为什么有不同文件夹的情况下找到它。等等
java- 301

接受的答案包含您的问题的答案:npm config ls -l | grep prefix,即使没有,正确的过程是提出一个更狭窄的新问题……
thebjorn

绝对不容易,因为您必须安装某些东西而不是查找某些东西(这使得它对于shell / bat脚本不可用)。
thebjorn

如果您要弄清楚安装过程中全局模块的放置位置(例如我的情况,可能还有其他人会根据当前标题找到此问题)。
java-addict301 '19
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.