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

标签 windows node.js module require npm

我目前正在 Windows 上学习 nodejs。使用 npm.cmd 全局安装了几个模块,nodejs 找不到安装的模块。以 Jade 为例,

npm install jade -g

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

var jade = require('jade');

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

最佳答案

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

查看类似问题了解更多详情:How do I install a module globally using npm?

关于windows - Nodejs 在 Windows 上找不到已安装的模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9587665/

相关文章:

windows - 如何使 Windows 服务发出蜂鸣声?

node.js - pm2 更改日志文件位置

node.js - Express cookie session 不会保留在 POST 请求中

javascript - 将模块附加到 Microsoft Dynamics CRM 表单事件

python - 在 Python 中使用堆栈

c# - DirectoryInfo.GetFiles() 不返回所有文件

c++ - MongoDB C Driver Windows 无法解析的外部符号

c# - 毫秒精度的 Windows 系统时间

node.js - 如何使用 puppeteer 在移动 Debug模式下打开 Chromium?

Python 导入仅在从包目录内部运行时有效