【问题标题】:Nodejs cannot find installed module on WindowsNodejs 在 Windows 上找不到已安装的模块
【发布时间】:2012-03-24 03:58:19
【问题描述】:

我目前正在 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


【解决方案1】:

我在 Windows 10 上工作过 npm config set prefix %AppData%\npm\node_modules

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

      • 非常感谢,你提供的链接很有帮助,我现在清楚多了,虽然模块搜索算法看起来有点复杂。最后,我使用环境变量 NODE_PATH 来引用全局模块路径set NODE_PATH=C:\Documents and Settings\DevUser\Application Data\npm\node_modules,它按预期工作。奇怪的是,全局安装的模块在windows下定位在'%USERPROFILE%\Application Data\npm\node_modules',同时NODE_PATH中不能有引号。
      • 很高兴为您提供帮助。没有改变 NODE_PATH 破坏了标准 node.js 模块的路径,比如 FS?
      • 我什至想知道为什么我的C:\Program Files\nodejs\node_modules\npm\node_modules 没有我刚刚使用npm install -g express 安装的模块,它在C:\Documents and Settings\swapnil\Application Data\npm\node_modules 中可用
      • 在 Windows 8 中路径是 %USERPROFILE%\AppData\Roaming\npm\node_modules
      • 如果你想知道你的全局 node_modules 目录在哪里,运行命令npm list -g。输出的第一行将是全局 node_modules 目录的父级——换句话说,全局 node_modules 目录是{output}\node_modules。当您运行npm install --global {xyz} 时,它还会打印出安装目录
      【解决方案4】:

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

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

      【讨论】:

        【解决方案5】:

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

        一般来说,经验法则是:

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

        ...

        当然,在某些情况下您希望两者都做。 Coffee-script 和 Express 都是具有 命令行界面,以及一个库。在这些情况下,您可以 执行以下操作之一:

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

        【讨论】:

        • They’re tiny JavaScript programs. 其中一些库肯定不小!
        • @UpTheCreek 我相信他指的是磁盘空间范围内的大小。它们是文本文件。它们客观上很小。
        【解决方案6】:

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

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

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

        节点安装消息

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

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

        这只是为了说明这个问题只有在 node 已经被另一个用户安装时才会出现(或者如果在安装期间选项 Add to PATH > npm modules 没有被标记)。

        【讨论】:

          【解决方案7】:

          我很难让全局模块工作。最后,我将C:\Users\yourusername\AppData\Roaming\npm 显式添加到系统变量下的PATH 变量中。我还需要让这个变量出现在列表中的 nodejs 路径变量之前。

          我正在运行 Windows 10。

          【讨论】:

          • 这是唯一对我有用的东西。在 Windows 8 上运行
          • 这也是唯一对我有用的东西,谢谢!
          • 这是唯一对我有用的方法,但我必须在路径中使用正斜杠。
          【解决方案8】:

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

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

          npm install gulp
          

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

          【讨论】:

            【解决方案9】:

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

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

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

            【讨论】:

            • 或者,对于 Windows 8 用户 %USERPROFILE%\AppData\Roaming\npm
            • 感谢有关删除 node_modules 部分的建议,我也在为此苦苦挣扎!
            【解决方案10】:

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

            【讨论】:

            • 或者,更简单地说,`%AppData%\npm`
            • 伙计,这很奇怪!从字面上看,我一直在寻找这个问题两天。这是我尝试过的最模糊的解决方案,也是第一个有效的解决方案。非常感谢。
            • 是的,只要添加到path环境变量中,我们就可以直接在windows 10中运行了
            • 它会用一个例子来展示如何实际执行此操作,而不是说诸如“只是添加到...”之类的话
            【解决方案11】:

            对于windows,大家都说要给nodejs和npm模块设置环境变量,你知道为什么吗? 部分模块自带命令行工具,安装模块后,C:\Program Files\nodejs下有[module].cmd文件,可以使用在窗口命令中启动。因此,如果不将包含 cmd 文件的路径添加到环境变量 %PATH% 中,您将无法通过命令窗口成功启动它们。

            【讨论】:

              【解决方案12】:

              我偶然发现了这个问题,因为我想在装有 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 here..)我在C:\Users\User\node_modules 看到一些模块 我在C:\Users\User\AppData\Roaming\npm\node_modules 看到一些模块 我在C:\Users\User\node_modules 看到一些模块也位于C:\Program Files (x86)\nodejs\node_modules\npm\node_modules 不知道这是怎么发生的。哪个是哪个,他们为什么这样做?
              【解决方案13】:

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

              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 is suggested 满足此要求。)

              测试环境:

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

              【讨论】:

                【解决方案14】:

                如果您使用的是 windows7 平台,也许您应该像这样更改 NODE_PATH: %AppData%\npm\node_modules

                【讨论】:

                • 它也在 Windows 8 上的 appdata\roaming
                • 我在带有 npm 2.5.1 的 Windows 8.1 上,并且我的 NODE_PATH 已按文档设置,但它仍然找不到我安装的软件包。想法?
                • 在 windows 10 中它应该只是 %AppData%\npm
                • 在我的情况下(W10)它是 %AppData%\Roaming\npm
                【解决方案15】:

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

                npm install -g gulp
                

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

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

                【讨论】:

                • 为了更清楚地说明这一点...当 Node 以管理员身份安装时,它会更新系统路径以包含对管理员全局节点模块文件夹的引用。当新用户全局安装某些东西时,它会安装到不同的节点模块文件夹。除了安装 Node 的用户之外,每个用户都需要更新他们的路径以包含他们的全局节点模块文件夹。如果您在同一帐户上安装和使用节点,则无需这样做。
                • Windows 8.1 pro with nodejs v6.9.4,设置路径运行:C:\Program Files\nodejs\nodevars.bat
                【解决方案16】:

                根据我对 win8.1 的经验,npm 将模块安装在 C:\Users\[UserName]\AppData\Roaming\npm\node_modules 但是dumply搜索它们 C:\Users\[UserName]\node_modules.

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

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

                【讨论】:

                • 这种方法只适用于我使用正斜杠的情况。
                • 这充其量只是一个 hack。
                • 哇,无需亲自处理。我只是说,如果您与其他人一起处理此代码,它将无法正常工作
                • @Ringo 显然。有很多方法可以解决这个问题。但是,如果你只是像我一样玩命,它至少可以为你指明正确的方向。根据我的经验,你从不完美的代码开始,然后改进它。
                • @saulius 我可以加入! :-)
                【解决方案17】:

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

                【讨论】:

                  【解决方案18】:

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

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

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

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

                  npm 安装

                  它安装依赖项

                  【讨论】:

                  • 这不会全局安装它(问题要求)。这会将依赖项拉入应用程序
                  • 我已经尝试了上面列出的所有方法,试图说服我的 node.js 安装识别全局安装的模块,但没有一个有效。即使在卸载并重新安装节点(v8.11.3 LTS)之后,每次我尝试在 node.js 脚本中发出 require("mongodb") 命令时,我都会收到相同的错误:“找不到模块 mongodb”。然而,如果我发出命令“npm ll -g mongodb”,NPM 会告诉我模块已安装。有人可以给我一些可以解决这个问题的信息吗?
                  • 更新:上面的 Saulius 提供了一个实际可行的解决方法,即在 JavaScript 的 require 语句中指定模块的完整路径。但是,如果他所说的关于 node.js 在错误文件夹中搜索已安装模块的观察是正确的,有人可以提醒 node.js 开发人员注意这一点吗?因为问题仍然影响 v8.11.3 LTS。
                  【解决方案19】:

                  为了简短起见,请在您的应用目录中使用npm link jade

                  【讨论】:

                  • 好像npm link jade不能在Windows上运行,npm返回错误信息如下:npm ERR! Error: npm link not supported on windows
                  • 现在可以了,v0.8.9版本
                  • @beyonddoor:您需要从管理员命令窗口运行npm link
                  猜你喜欢
                  • 1970-01-01
                  • 2019-07-21
                  • 1970-01-01
                  • 2013-03-23
                  • 1970-01-01
                  • 2017-08-11
                  • 2021-11-23
                  • 2019-11-14
                  相关资源
                  最近更新 更多