小编典典

Nodejs 在 Windows 上找不到已安装的模块

all

我目前正在 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 上运行?


阅读 71

收藏
2022-05-20

共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


老故事

我自己对 node.js 非常陌生,所以我可能并不完全正确,但根据我的经验,它是这样工作的:

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