Node.js: 找不到模块 'request'

105
我安装了request模块,但出现以下错误:
module.js:340
    throw err;
          ^
Error: Cannot find module 'request'
我已经阅读了所有有关此错误的帖子,理解这是因为找不到全局模块请求(requests),但我已经尝试了两个建议。这会在 /usr/local/bin 目录下安装吗?因为我没有看到它。我在每个命令后都重启了终端,但仍然收到“找不到模块”错误。更新:在我的初始目录中必须存在某种冲突,因为 “npm install request” 没有在 node_modules 下添加 “request”(其中有10个其他文件夹)...切换到一个新目录后就可以使用了。如果我使用 -g 开关运行它,我确实看到它被安装到 /usr/local/lib/node_modules/request。似乎我只需要更新我的配置文件,以便自动添加上述路径。
9个回答

205

进入您的项目目录

mkdir TestProject
cd TestProject

将此目录设为您的项目根目录(这将创建一个默认的package.json文件)

npm init --yes

安装所需的npm模块,并将其保存为项目依赖项(它将出现在package.json中)

npm install request --save
在项目目录中创建一个名为test.js的文件,并将包示例中的代码复制到该文件中。
var request = require('request');
request('http://www.google.com', function (error, response, body) {
  if (!error && response.statusCode == 200) {
    console.log(body); // Print the google web page.
  }
});

您的项目目录应该像这样

TestProject/
- node_modules/
- package.json
- test.js

现在只需在您的项目目录中运行节点

node test.js

1
是的,那正是我所遵循的示例。我已经在我的测试项目中使用-g标志运行了npm安装程序10次。我可以在我的测试目录中看到node_modules,但request不在其中。它继续给我报错。 - Sonic Soul
因为尽管我遇到了一些奇怪的冲突,但这些是正确的步骤。当我在一个新目录中再次执行时,它成功了。我添加了一个关于我的经历的更新,这可能对其他人来说很少见。 - Sonic Soul

40
你只需要在项目中本地安装request即可。
只需进入包含你的js文件的文件夹并运行cd
npm install request

在执行了“npm install request”之后,我将我的app.js复制到request文件夹中并尝试从那里运行,但结果相同。而且我需要在不止一个项目中使用它。 - Sonic Soul
@SonicSoul:你误解了Node包的工作原理。require('request')会在./node_modules/request中查找,这也是npm install安装它的位置。你应该从每个应用程序的根目录运行npm install,并且不应该自己触碰node_modules文件夹。 - SLaks
在运行 npm install request 之前,您应该运行 npm init。按照提示操作,这将在您的项目文件夹中创建一个 package.json 文件。然后运行 npm install -S request,它将把 request 模块安装到 node_modules 文件夹中,并将 request 添加到您的 package.json 文件中。 - Noah
@Drumnbass:不是的。npm install也会安装所有依赖项。 - SLaks
@SLaks 恰好是我所需要的 :) 謝謝您先生! - Nekto
显示剩余2条评论

21

我曾经遇到过同样的问题,对我来说npm install request --save解决了这个问题。希望能帮到你。


2

我尝试使用版本在本地安装模块,成功了!

npm install request@^2.*

感谢。

2

我遇到了与全局安装相同的问题,然后我尝试本地安装,它就能正常工作了。


1

如果您找不到某个模块,请尝试使用静态URI,例如:

var Mustache = require("/media/fabio/Datos/Express/2_required_a_module/node_modules/mustache/mustache.js");

这个示例在64位的Ubuntu Gnome 16.04上运行,node版本为v4.2.6,npm版本为3.5.2。 参考链接:Ben Nadel的博客


0
我遇到了同样的问题,这是我解决它的方法。
打开终端:
mkdir testExpress
cd testExpress
npm install request

或者

sudo npm install -g request // If you would like to globally install.

现在不要使用 < / p>

node < code>app.js< / code > 或 node < code>test.js< / code > ,这样做会遇到这个问题。您还可以使用此命令打印所引起的问题.. "node -p app.js"< / code >< / p >

上述启动nodeJs的命令已被弃用。请改用< / p>

npm start

你应该看到这个...

testExpress@0.0.0 start /Users/{username}/testExpress
node ./bin/www

打开你的网络浏览器并检查 localhost:3000

你应该看到 Express 已经安装(欢迎使用 Express)


0

引用错误:找不到变量:require。

您已安装“npm”,可以像往常一样在“localhost”“127.0.0.1”上运行脚本。

当您在“npm”中使用带有“options”的http.clientRequest()时,需要在模块内部安装“RequireJS”。

模块是可以由Node加载的node_modules目录中的任何文件或目录。安装“RequiereJS”以使http.clientRequest(options)正常工作。


0

我在Ubuntu上全局安装请求时遇到了同样的问题。

$ npm install request --global

当全局安装请求时,此解决方案有效:

设置环境变量NODE_PATH='/absolute/path/to/node/modules'可以解决此错误。

$ export NODE_PATH=/usr/local/lib/node_modules

然而,这将需要您为每个shell会话导出此变量。更永久的选择是:

  • export NODE_PATH=/usr/local/lib/node_modules添加到您的.bashrc文件中,然后
  • 运行source ~/.bashrc来执行更新的.bashrc文件

请注意,全局安装的节点模块的绝对路径在某些情况下可能会有所不同。例如,它可能是/usr/lib/node_modules而不是/usr/local/lib/node_modules。在设置NODE_PATH之前,请仔细检查正确的路径。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接