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

我现在正在Windows上学习nodejs。有几个模块是通过npm全局安装的。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上工作?

344148 次浏览

添加一个名为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文件夹开始并检查它)。

有关详细信息,请参见类似问题:如何使用npm全局安装一个模块?

我将引用该节点的博客

一般来说,经验法则是:

    如果你正在安装你想在程序中使用的东西,使用require('whatever'),然后在本地安装它,在根目录下 您的项目。李< / >
  • 如果你正在安装一些你想在shell中使用的东西,在命令行或其他地方,全局安装它,这样它 二进制文件将在PATH环境变量中结束

...

当然,有些情况下你想两者都做。 Coffee-script和Express都是很好的例子 命令行界面,以及一个库。在这些情况下,你可以

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

简而言之,在你的应用目录中使用npm link jade

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

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

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

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

npm安装

它会安装依赖项

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

或者,你也可以在~/.npmrc前缀中添加。我有C:\Program Files\nodejs为64 Win7。

根据我的win8.1 npm安装模块的经验 C:\Users\[UserName]\AppData\Roaming\npm\node_modules 但他却继续搜索 C:\Users\[UserName]\node_modules . < / p >

一个简单的解决方案参考模块在应用程序的全路径:

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

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

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

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

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

npm install -g gulp

以管理员身份登录,同时以普通用户身份登录。

解决方案:当以普通用户执行相同的安装时(而不是“以admin身份运行”cmd)一切正常。我猜这与默认的安装和搜索路径有关。

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

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

测试环境:

  • 赢7 (Ent。, 64位,SP1), Node.js 4.2.4, npm 2.14.12
  • win8.1 (Ent。, 64位),Node.js 0.10.30, npm 1.4.21
对于windows,每个人都说你应该为nodejs和npm模块设置环境变量,但是你知道为什么吗? 对于一些模块,它们有命令行工具,在安装模块后,在C:\Program Files\nodejs中有(模块).cmd文件,用于在窗口命令中启动。因此,如果你不将包含cmd文件的路径添加到环境变量%路径%中,你将无法通过命令窗口成功启动它们

我无意中发现了这个问题,因为我想在windows 10的新电脑上使用node.js和visual studio 2015。我在windows 7、8和8.1上使用node.js,从来没有问题node.js找到一个模块。我使用一个遗留的node.js 0.10.39,因为我必须使用这个版本,因为串行和RFXCOM模块。

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

为了让它在windows 10上工作,我通过将文件夹%USERPROFILE%\AppData\Roaming\npm添加到我的PATH来解决它。像这样附加\node_modules: %USERPROFILE%\AppData\Roaming\npm\node_modules\对我不起作用。

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

C:\Users\myaccount\AppData\Roaming\npm\ node_modules

npm install gulp

这修复了我的“吞咽不被识别”的问题

我花了一段时间让全局模块工作。最后,我显式地将C:\Users\yourusername\AppData\Roaming\npm添加到系统变量下的PATH变量中。我还需要将这个变量放在列表中的nodejs path变量之前。

我用的是Windows 10。

我也遇到了同样的问题,试图用npm install -g bower安装bower

我想这是因为节点由其他用户安装,而不是我。

我卸载了节点,然后重新安装了它。在安装过程中,我看到选项添加到路径> npm模块的文本:

节点安装中的消息

enter image description here

在节点安装之后,我再次执行npm install -g bower。现在凉亭起作用了。

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

这只是为了说明只有当node已由其他用户安装(或者在安装过程中未标记选项添加到路径> npm模块)时才会发生此问题。

只需从下载并重新安装节点,这将修复所有路径问题。

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

以上所有的答案都不适合我。唯一有效的方法是将%AppData%\npm添加到环境路径变量中,以删除C:\Program Files\nodejs.中的两个ng文件

ng包没有安装在C:\Program Files\nodejs\ node_modules中,因此使用nodejs目录中的ng二进制文件显然是行不通的。

我不知道为什么它在这个目录中搜索,因为我已经配置了 —PATH环境变量 - C:\Users\MyUser目录下的.npmrc —尝试添加系统变量和/或NODE_PATH

对我来说,工作在Windows 10 npm config set prefix %AppData%\npm\node_modules

我必须在System variables下的Path变量中添加以下内容。在User variable下设置变量对我不起作用。我用的是windows 11。

%USERPROFILE%\AppData\Roaming\npm