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

时间:2012-03-06 16:21:19

标签: windows node.js module require npm

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

19 个答案:

答案 0 :(得分:325)

添加一个名为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 不是安装全局库的方法,它只是一种将它们放在系统路径上的方法,因此您可以从命令行调用它们而无需写入它们的完整路径。例如,节点应用程序正在转换本地文件,例如 less ,这很有用 - 如果您在全局安装它,则可以在任何目录中使用它。
  2. node.js本身没有查看npm全局目录,它正在使用另一种算法来查找所需的文件:http://nodejs.org/api/modules.html#modules_file_modules(基本上它扫描路径中的每个文件夹,从当前的开始node_modules 文件夹并检查它。)
  3. 有关详细信息,请参阅类似问题:How do I install a module globally using npm?

答案 1 :(得分:33)

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

答案 2 :(得分:26)

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

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

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

答案 3 :(得分:16)

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

答案 4 :(得分:12)

我将引用此节点的blog post ...

  

一般来说,经验法则是:

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

...

     

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

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

答案 5 :(得分:10)

要简短,请在您的应用目录中使用npm link jade

答案 6 :(得分:8)

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

  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如果您正在使用mklink等操作系统,例如Vista和更新版本,则需要see here。)
  4. 测试环境:

    • Win 7(Ent。,64-bit,SP1),Node.js 4.2.4,npm 2.14.12
    • Win 8.1(Ent。,64-bit),Node.js 0.10.30,npm 1.4.21

答案 7 :(得分:5)

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

length
以普通用户身份登录时以管理员身份

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

答案 8 :(得分:5)

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

我正在运行Windows 10。

答案 9 :(得分: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");

答案 10 :(得分:3)

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

答案 11 :(得分:2)

我遇到了同样的问题,尝试使用npm install -g bower

安装bower

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

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

节点安装中的消息

enter image description here

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

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

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

答案 12 :(得分:1)

或者,您可以添加到~/.npmrcprefix。 64 Win7我得C:\Program Files\nodejs

答案 13 :(得分: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。

答案 14 :(得分:1)

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

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

npm install gulp

这解决了我的“gulp无法识别”的问题

答案 15 :(得分:1)

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

上工作

答案 16 :(得分:0)

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

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

答案 17 :(得分:0)

以上所有答案均不适用于我。最终唯一可行的方法是将%AppData%\ npm添加到环境Path变量 AND 中,以删除C:\ Program Files \ nodejs中的两个ng文件。

ng包未安装在C:\ Program Files \ nodejs \ node_modules中,因此很明显,使用nodejs目录中的ng二进制文件将无效。

我不确定为什么要在此目录中搜索,因为我已经配置了 -PATH环境变量 -C:\ Users \ MyUser中的.npmrc -尝试添加系统变量和/或NODE_PATH

答案 18 :(得分:-4)

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

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

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

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

npm install

安装依赖项