如何使用Node.js解决“无法找到模块”错误?

How do I resolve “Cannot find module” error using Node.js?

从GitHub下拉模块并按照说明构建它之后,我尝试使用以下方法将其拉入现有项目中:

1
> npm install ../faye

这似乎可以解决问题:

1
2
3
4
5
6
> npm list
/home/dave/src/server
└─┬ [email protected]
  ├── [email protected]
  ├── [email protected]
  └── [email protected]

但是Node.js找不到模块:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
> node app.js
node.js:201
        throw e; // process.nextTick error, or 'error' event on first tick
              ^
Error: Cannot find module 'faye'
    at Function._resolveFilename (module.js:334:11)
    at Function._load (module.js:279:25)
    at Module.require (module.js:357:17)
    at require (module.js:368:17)
    at Object. (/home/dave/src/server/app.js:2:12)
    at Module._compile (module.js:432:26)
    at Object..js (module.js:450:10)
    at Module.load (module.js:351:31)
    at Function._load (module.js:310:12)
    at Array.0 (module.js:470:10)

我真的很想了解这里发生了什么,但我对于下一步该看哪里感到有点失落。 有什么建议?


使用npm install仅将模块安装到当前目录中(在名为node_modules的子目录中)。 app.js位于home/dave/src/server/下吗?如果没有,并且您想要使用任何目录中的模块,则需要使用npm install -g全局安装它。

我通常在本地安装大多数软件包,以便它们与我的项目代码一起检入。

更新(3/2016):

我收到了很多反应,特别是我检查了我的代码所依赖的包。几天前,有人未发布他们所有的软件包(https://medium.com/@azerbike/i-ve-just-liberated-my-modules-9045c06be67c#.kq9s64clp),这打破了React,Babel和几乎所有的东西其他。希望现在很清楚,如果你有生产代码,你就不能依赖NPM来实际维护你的依赖关系。


我有一个非常相似的问题。删除整个node_modules文件夹并重新安装为我工作:

1
2
rm -rf node_modules
npm install


1
npm install --save module_name

例如,如果错误是:

{ [Error: Cannot find module '/root/.npm/form-data'] code: 'MODULE_NOT_FOUND' }

然后您可以通过执行命令npm install --save form-data来解决此问题。


当第一个npm安装由于某种原因(npm的SIGINT)崩溃,或者延迟太长或数据已损坏时,会发生这种情况。
再次尝试npm安装不会解决问题。

npm首次检查出错了,所以最好选择删除文件并重新启动npm install。


对于TypeScript用户,如果要导入内置节点模块(例如httppathurl)并且出现错误,例如"Cannot find module"x",则可以通过运行修复错误

1
npm install @types/node --save-dev

该命令将NodeJS TypeScript定义导入到项目中,允许您使用Node的内置模块。


如果使用nvm,请检查是否为正确的Node.js版本编译了绑定到其他库的现有node_modules。

我遇到了同样的错误。原因如下:我们使用nvm,因为我们在服务器上运行两个应用程序,一个需要Node.js 5.6因为它使用node-gd(现在不在Node.js 6上运行),另一个需要Node.js 6. Node.js 6是apt-get安装。

我们还使用pm2工具进行部署。

因此,默认设置是当nvm无效时pm2进程启动,因此它使用了Node.js的apt-get安装(版本6)。所以主要的pm2守护进程以Node.js 6开头。如果我在fork模式下运行应用程序,它们会在不同的进程中启动,并且nvm设置生效。当我以群集模式运行应用程序时 - 它们继承非nvm环境。

因此,当我尝试切换到群集模式时,应用程序无法启动,因为为5.6编译的绑定失败并显示此消息。

当nvm setings生效时,我通过重启pm2来解决这个问题。还应该修复启动脚本。


从项目中删除node_module根文件夹(例如:myApp)。
转到myApp文件夹,然后在终端上键入以下命令

1
>myApp>npm install

它将安装项目所需的所有依赖项模块。


当团队中的其他人在SVN中更新package.json时,我遇到了同样的问题。仅删除node_modules目录没有帮助。我是如何解决这个问题的:

1
2
3
4
5
6
rm -rf node_modules
rm package.json
rm package-lock.json
svn up
npm install
ng build --env=prod

希望这有助于某人!


我昨天遇到了这个错误。花了一些时间才意识到package.json中的main条目指向我移动的文件。一旦我更新了错误消失并且包工作正常。


指定restler文件夹的路径,该文件夹位于node_modules文件夹中,如:var rest = require('。/ node_modules / restler');

这对我有用。


检查环境变量NODE_PATH是否设置正确并指向node_modules路径。 nodejs使用此变量来搜索库


如果您require在其package.json中具有缺少或不正确的main字段的模块,则可能会遇到此错误。虽然安装了模块本身,但npm / node必须使用单个.js文件作为模块的入口点。如果main字段不存在,则默认在模块的文件夹中查找index.js。如果模块的主文件未被称为index.js,则它将无法require

在将基于browserify的模块转换为CommonJS require模块时发现; browserify并不关心缺少的main字段,因此错误没有引起注意。


专家提示:

这个错误发生在我身上,同时对抗疲劳和轻微的疾病,因为我键入node blah而不是npm blah

收到的错误消息不够生气,不能提醒我自己的愚蠢行为!


在我的情况下,我有UNMET PEER DEPENDENCY redux@^3.0.0导致此错误消息,查看所有这些消息并使用--save再次安装丢失的模块

1
npm install redux --save


我可以再添加一个地方来检查;我试图使用的包是我发布到私有NPM仓库的另一个我自己的包。我忘了在package.json中正确配置'main'属性。所以,包在那个消费包的node_modules文件夹中,但我得到了"找不到模块"。我花了几分钟才意识到自己的错误。 :-(


我试图发布自己的包,然后将其包含在另一个项目中。我有这个问题,因为我已经构建了第一个模块。我使用ES2015导出创建模块,例如我们说模块看起来像:

1
2
3
export default function(who = 'world'){
    return `Hello ${who}`;
}

用Babel编译之后发布:

1
2
3
4
5
6
7
8
9
10
11
12
'use strict';

Object.defineProperty(exports,"__esModule", {
    value: true
});

exports.default = function () {
    var who = arguments.length <= 0 || arguments[0] === undefined ? 'world' : arguments[0];


    return 'Hello ' + who;
};

所以在npm install module-name之后的另一个项目(没有ES2015)我必须这样做

var hello = require('module-name').default;

实际上导入了包。

希望有所帮助!


刚发现一个不寻常的场景可能对某人有用,并且有点像红鲱鱼。

我也得到了Can not Find Module错误,但奇怪的是,在我的本地(Mac托管)Node.js环境中,一切都运行良好。只有在我们的Linux服务器上部署代码时才会出现此问题。

嗯......事实证明这是一个错字(显然)基于Mac的Node.js安装非常乐意忽略。

包含看起来像这样:

1
var S3Uploader = require('./S3Uploader.class');

但实际文件名为"s3Uploader.class.js"

注意代码和文件名之间's'与'S'的套管差异。

所以 - 奇怪的是,这里没有其他解决方案可以解决您的问题,请检查您是否错误地排除了所包含文件名中的字符! :)

和DUH!


使用webpackwebpack-dev-middleware时遇到此问题。

已将单个文件转换为文件夹。

观察者似乎没有看到新文件夹,现在模块丢失了。

通过重新启动进程修复。


也许像我一样,你将Express中的'view engine'设置为不存在的引擎,或者尝试使用未注册的模板引擎。
确保您使用:

app.engine('engine name',engine)
app.set('view engine','engine name')


请安装新的CLI v3(npm install -g ionic @ latest)。

如果此问题仍然是CLI v3中的问题。谢谢!


删除node / npm然后重新安装稳定(不是最新)的版本对我有用。

1
2
3
sudo rm -rf /usr/local/{lib/node{,/.npm,_modules},bin,share/man}/{npm*,node*,man1/node*}

https://nodejs.org/en/download/

如果已成功安装软件包,请转到node_modules文件夹,然后检查文件和路径。然后导入。
希望这可以帮助。


首先,是的,我的答案的一部分肯定有助于解决OP发布的错误。其次,在尝试下面的步骤后,我遇到了其他一些错误,因此,也编写了这些错误的解决方案。

(Psst!我不确定我是否成功帮助解决了上述错误,或者我是否违反了一些规则或格式的回答,但是我遇到了上述错误和其他一些问题,我花了很多时间才找到这些错误的正确解决方案。我正在编写完整的解决方案,因为如果其他人也面临这些错误,那么他希望在这里找到解决方案。)

因此,添加并详细说明PrashanthiDevi提供的答案,并添加我的个人经验,这里是:

我是整个e2e和单元测试部分的新手。我从Protractor开始研究这个部分。现在我已经有了编写测试的文件,但我必须运行测试。

我已经安装了所有必需的软件和工具,但是当我最初运行用于运行测试的代码gulp itest时,我得到了"无法找到模块"错误。在经历了关于SO的许多不同问题之后,我找到了一个我认为可以帮助获得解决方案的答案。

该人建议在我的项目文件夹中运行命令npm install

这样做的原因是更新项目文件夹中的node-modules文件夹,其中包含所有必需和必需的文件和依赖项。

(以下部分可能与此问题无关,但如果有人遇到我遇到的相同情况,可能会有所帮助。)

上面的步骤肯定解决了我以前的错误,但扔了一个新错误!这次错误是Could not find chromedriver at '..
ode_modules\protractor\selenium\chromedriver'

但是,这个错误的解决方案对我来说非常愚蠢(而且很有趣)。我已经在我的selenium文件夹中有chromedriver文件了。但是,事实证明上述错误即将发生,因为我的chromedriver文件位于selenium文件夹内,而不是在chromedriver文件夹中。因此,创建一个chromedriver文件夹并复制chromedriver文件解决了我的问题!

此外,对于错误:等待WebDriver服务器超时,您可以将此行代码添加到exports.config{}内的conf.js文件中:

seleniumAddress: 'http://localhost:8080/'

希望这可以帮助!


仅运行以下命令:

1
npm install

它将在node_modules文件夹中安装所有必需的模块。


我得到了解决这个问题的简单解决方案。

只需删除C: Users UserName AppData roaming npm

然后安装节点。

现在你的问题将得到解决。


更改目录并指向当前项目文件夹,然后"npm install"。

这会将所有依赖项和模块安装到项目文件夹中。