我现在正在Windows上学习nodejs。有几个模块是通过npm全局安装的。nodejs无法找到已安装的模块。以玉为例,

npm install jade -g

Jade安装在“C:\Program Files (x86)\nodejs\node_modules”目录下,但下面的代码将失败,并提示“无法找到模块' 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部分(例如Windows 7/8/10中的%AppData%\npm)。


古老的故事

我自己对node.js很陌生,所以我可能不完全正确,但从我的经验来看,它是这样工作的:

-g is not a way to install global libraries, it's only a way to place them on system path so you can call them from command line without writing the full path to them. It is useful, for example, then node app is converting local files, like less — if you install it globally you can use it in any directory. node.js itself didn't look at the npm global dir, it is using another algorithm to find required files: http://nodejs.org/api/modules.html#modules_file_modules (basically its scanning every folder in the path, starting from the current for node_modules folder and checks it).

更多细节请参见类似的问题:如何使用npm全局安装一个模块?


我将引用这个节点的博客文章…

In general, the rule of thumb is: If you’re installing something that you want to use in your program, using require('whatever'), then install it locally, at the root of your project. If you’re installing something that you want to use in your shell, on the command line or something, install it globally, so that its binaries end up in your PATH environment variable. ... Of course, there are some cases where you want to do both. Coffee-script and Express both are good examples of apps that have a command line interface, as well as a library. In those cases, you can do one of the following: Install it in both places. Seriously, are you that short on disk space? It’s fine, really. They’re tiny JavaScript programs. Install it globally, and then npm link coffee-script or npm link express (if you’re on a platform that supports symbolic links.) Then you only need to update the global copy to update all the symlinks as well.


简而言之,在你的应用目录中使用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


或者,您可以添加到~/。NPMRC右前缀。我有C:\Program Files\nodejs的64 Win7。


从我使用win8.1的经验来看,npm在上面安装模块 C:\Users\【用户名】\ AppData \ \ npm \ node_modules徘徊 但他却继续搜索 C:\Users\【用户名】\ node_modules。

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

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),一切正常。我猜这与默认的安装和搜索路径有关。


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

Edit/add User variables (of the upper box) instead of System variables (of the lower part); otherwise you have to "run as administrator" to get it work. Append ;%AppData%\npm to Path in order to use it as a command line tool (if supported, like jshint and grunt-cli). Create NODE_PATH and set it %AppData%\npm\node_modules in order to require('<pkg_name>') in scripts without install it in the project directory. (But npm link is suggested for this requirement if you're working on OS with mklink such as Vista and newer.)

测试环境:

赢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模块设置环境变量,但你知道为什么吗? 对于一些模块,他们有命令行工具,安装模块后,有[模块]。cmd文件在C:\Program Files\ nodejs中,用于在窗口命令中启动。因此,如果您没有将包含cmd文件的路径添加到环境变量% path %,则无法通过命令窗口成功启动它们。


我无意中发现了这个问题,因为我想在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

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

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

节点安装中的消息

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

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

这只是为了说明,只有当node已经由其他用户安装(或者在安装过程中没有标记Add to PATH > npm modules选项)时,才会发生此问题。


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

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


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

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

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


对于我来说,在Windows 10 npm配置设置前缀%AppData%\npm\node_modules


我必须添加以下路径变量下的系统变量。在用户变量下设置变量不适合我。我用的是windows 11。

%USERPROFILE%\AppData\Roaming\npm