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

问题描述 投票:222回答:17

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

windows node.js module require npm
17个回答
326
投票

添加一个名为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部分(例如Windows 7/8/10中的%AppData%\npm)。


老故事

我对node.js自己也很陌生,所以我可能不完全正确,但根据我的经验,它的工作原理如下:

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

有关详细信息,请参阅类似问题:How do I install a module globally using npm?


3
投票

从我对win8.1的经验来看,npm在C:\Users\[UserName]\AppData\Roaming\npm\node_modules上安装模块,但是在C:\Users\[UserName]\node_modules上搜索它们。

一个简单的解决方案参考模块应用于完整路径:

var jsonminify = require("C:/Users/Saulius/AppData/Roaming/npm/node_modules/jsonminify");

3
投票

对于windows,每个人都说你应该为nodejs和npm模块设置环境变量,但是你知道为什么吗?对于某些模块,他们有命令行工具,安装完模块后,在C:\ Program Files \ nodejs中有[module] .cmd文件,它用于在window命令中启动。因此,如果不将包含cmd文件的路径添加到环境变量%PATH%,则不会通过命令窗口成功启动它们。


2
投票

我有同样的问题,试图用npm install -g bower安装凉亭

我认为这是因为节点是由另一个用户安装的,而不是我。

我卸载了节点,然后重新安装它。在安装过程中,我看到了这个文本的选项Add to PATH> npm modules:

节点安装中的消息

enter image description here

节点安装后,我再次执行npm install -g bower。然后凉亭工作。

当然没有必要像我一样用自己的用户重新安装节点。解决方案必须通过NODE_PATH或PATH变量,正如其他用户所解释的那样。

这只是说明只有在另一个用户安装了节点时才会出现此问题(或者如果在安装过程中没有标记添加到PATH> npm模块的选项)。


1
投票

或者你可以添加到~/.npmrcprefix。我有64 Win7的C:\Program Files\nodejs


1
投票

我偶然发现了这个问题,因为我想在带有Windows 10的新计算机上使用带有visual studio 2015的node.js。我在Windows 7和8和8.1上使用了node.js。从来没有问题node.js找到一个模块。我使用遗留node.js 0.10.39,因为我必须使用此版本,因为串行和RFXCOM模块。

Windows 10的答案是使用C:\ Users \ User \ node_modules在环境变量中设置NODE_PATH。


1
投票

对于Windows 10,我必须在文件夹中本地安装gulp:

C:\用户\我的账户\应用程序数据\漫游\故宫\ node_modules

npm install gulp

这解决了我的“gulp未被识别”的问题


0
投票

只需从this下载并重新安装该节点,这将解决所有路径问题。

不要忘记重新启动命令提示符或终端。


-4
投票

如果您使用的是Windows,则需要一些步骤,1)创建一个名为package.json的文件

 {
  "name": "hello"
, "version": "0.0.1"
, "dependencies": {
    "express": "*"
  }
}

其中hello是包的名称,*表示依赖项的最新版本

2)代码到项目目录并运行以下命令

npm安装

它安装依赖项


33
投票

如果你在windows7平台上,也许你应该像这样改变NODE_PATH:%AppData%\npm\node_modules


26
投票

我知道我可以唤醒一个僵尸,但我认为这仍然是一个问题,如果您需要在Windows 7上全局访问节点模块,您需要将其添加到您的全局变量路径:

C:\Users\{USER}\AppData\Roaming\npm

重要的是:只有这个没有node_modules部分,花了我半小时看到这个。


16
投票

为了使它在Windows 10上工作,我通过将文件夹%USERPROFILE%\AppData\Roaming\npm添加到我的PATH来解决它。像这样附加\node_modules%USERPROFILE%\AppData\Roaming\npm\node_modules\不适合我。


12
投票

我只想引用这个节点的blog post ......

一般来说,经验法则是:

  • 如果您要在程序中安装要使用的东西,请使用require('whatever'),然后在项目的根目录下在本地安装。
  • 如果您要在shell中安装要在shell中使用的东西,请在命令行或其他东西上安装它,以便全局安装它,以便它的二进制文件最终位于PATH环境变量中。

...

当然,在某些情况下,您希望同时执行这两项操作。 Coffee-script和Express都是具有命令行界面的应用程序以及库的良好示例。在这些情况下,您可以执行以下操作之一:

  1. 在两个地方安装它。说真的,你的磁盘空间不足吗?这很好,真的。它们是一个很小的JavaScript程序。
  2. 全局安装,然后npm link coffee-script或npm link express(如果你在支持符号链接的平台上。)那么你只需要更新全局副本来更新所有的符号链接。

10
投票

要缩短它,请在app目录中使用npm link jade


10
投票

试图添加/编辑环境变量,并得出结论:

  1. 编辑/添加User variables(上方框)而不是System variables(下方);否则你必须“以管理员身份运行”才能使其正常运行。
  2. ;%AppData%\npm附加到Path以将其用作命令行工具(如果支持,如jshintgrunt-cli)。
  3. 创建NODE_PATH并将其设置为%AppData%\npm\node_modules以便在脚本中使用require('<pkg_name>')而无需将其安装在项目目录中。 (但是如果你正在使用像npm link is suggested这样的操作系统,比如Vista和更新版本的mklink。)

测试环境:

  • Win 7(Ent。,64-bit,SP1),Node.js 4.2.4,地上2.14.12
  • Win 8.1(条目,64位),Node.js 0.10.30,高于1.4.21

6
投票

我有一个糟糕的时间让全球模块工作。最后,我明确地将C:\Users\yourusername\AppData\Roaming\npm添加到系统变量下的PATH变量中。我还需要将此变量放在列表中的nodejs path变量之前。

我正在运行Windows 10。


5
投票

我在Windows 7上遇到了这个问题,正在运行

npm install -g gulp

以普通用户身份登录时作为管理员。

解决方案:当执行与普通用户相同的安装(而不是“以管理员身份运行”为cmd)时,一切都很好。我想这与默认安装和搜索路径有关。

© www.soinside.com 2019 - 2024. All rights reserved.