一尘不染

Node.js在Windows上找不到已安装的模块

node.js

我目前正在Windows上学习nodejs。通过npm.cmd在全局安装了几个模块,nodejs无法找到已安装的模块。以玉为例

npm install jade -g

Jade安装在目录中"C:\Program Files (x86)\nodejs\node_modules",但以下代码将失败并显示"Cannot find module 'jade'"错误,

var jade = require('jade');

但是,在本地安装jade时,代码将成功运行(npm中没有-
g选项)。我不想使用本地安装的模块,这对我来说是浪费磁盘空间。如何使全局安装的模块在Windows上工作?


阅读 292

收藏
2020-07-07

共1个答案

一尘不染

添加一个名为的环境变量NODE_PATH,并将其设置为%USERPROFILE%\Application Data\npm\node_modules(Windows XP),%AppData%\npm\node_modules(Windows
7/8/10)或npm最终在您的Windows风味上安装模块的位置。要一劳永逸地完成此操作,请在“系统属性”对话框(运行control.exe sysdm.cpl,System,3)的“高级”选项卡中将其添加为系统变量。

Windows 7+中的快速解决方案是仅运行:

rem for future
setx NODE_PATH %AppData%\npm\node_modules
rem for current session
set NODE_PATH=%AppData%\npm\node_modules

值得一提的NODE_PATH是仅在Node应用程序中导入模块时使用。如果要在CLI中使用全局安装的模块的二进制文件,则需要将其也添加到您的中PATH,但不要添加任何node_modules部分(例如,%AppData%\npm在Windows
7/8/10中)。


旧故事

我本人对node.js相当陌生,因此我可能并不完全正确,但是根据我的经验,它是这样工作的:

  1. -g 并不是安装全局库的方法,它只是将它们放置在系统路径上的一种方法,因此您可以从命令行调用它们,而无需编写它们的完整路径。它是有用的,例如,然后点应用的转换本地文件,如 -如果你安装它在全球范围,你可以在任何目录中使用它。
  2. node.js本身并未查看npm全局目录,而是使用另一种算法来查找所需文件:http : //nodejs.org/api/modules.html#modules_file_modules(基本上是扫描路径中的每个文件夹,从头开始从当前的 node_modules 文件夹中进行检查)。
2020-07-07