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

时间:2012-01-26 18:57:43

标签: node.js

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

> npm install ../faye

这似乎可以解决问题:

> npm list
/home/dave/src/server
└─┬ faye@0.7.1
  ├── cookiejar@1.3.0
  ├── hiredis@0.1.13
  └── redis@0.7.1

但是Node.js找不到模块:

> 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.<anonymous> (/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)

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

35 个答案:

答案 0 :(得分:451)

使用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来实际维护你的依赖关系。

答案 1 :(得分:387)

我有一个非常类似的问题。删除整个node_modules文件夹并重新安装对我有用:

rm -rf node_modules
npm install

答案 2 :(得分:75)

npm install --save module_name

例如,如果错误是:

  

{[错误:无法找到模块&#39; /root/.npm/form-data']代码:&#39; MODULE_NOT_FOUND&#39; }

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

答案 3 :(得分:17)

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

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

答案 4 :(得分:15)

对于TypeScript用户,如果要导入内置节点模块(例如httppathurl),则会收到错误,例如{{1}然后可以通过运行

来修复错误
"Cannot find module "x"

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

答案 5 :(得分:8)

如果您使用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来解决这个问题。还应该修复启动脚本。

答案 6 :(得分:6)

从项目中删除defaultConfig { applicationId "com.example.me" minSdkVersion 16 targetSdkVersion 22 versionCode 1 versionName "1.0" multiDexEnabled true } 根文件夹(例如:node_module)。 转到myApp文件夹,然后在终端

中键入以下命令
myApp

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

答案 7 :(得分:5)

rm package-lock.json
rm -r node_modules
npm i

这应该可以解决问题并安装所有软件包。

答案 8 :(得分:4)

昨天我遇到了这个错误。花了一些时间才意识到private boolean switchChecked = false; public void handleSwitchClick(boolean checked) { if (checked) { switchChecked = true; // do something else { switchChecked = false; // do something else } } 中的main条目指向了我移动的文件。一旦我更新了错误消失并且包工作正常。

答案 9 :(得分:4)

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

这对我有用。

答案 10 :(得分:3)

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

rm -rf node_modules
rm package.json
rm package-lock.json
svn up
npm install
ng build --env=prod

希望这有助于某人!

答案 11 :(得分:3)

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

答案 12 :(得分:2)

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

将基于browserify的模块转换为CommonJS require模块时发现; browserify并不关心丢失的main字段,因此错误未被注意。

答案 13 :(得分:2)

如果其他所有方法都不适合您... 试试

npm link package_name

例如

npm link webpack
npm link autoprefixer

e.t.c

答案 14 :(得分:2)

专业提示:

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

收到的错误消息并不足以引起我自己的愚蠢行为!

答案 15 :(得分:1)

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

答案 16 :(得分:1)

我在使用 live-server(使用 Fullstack React 书籍)时遇到了这个问题:

我一直得到:

<块引用>
Error: Cannot find module './disable-browser-cache.js' 
...

我不得不调整我的 package.json

  • 来自:

    “脚本”:{ ... "server": "live-server public --host=localhost --port=3000 --middleware=./disable-browser-cache.js" ... } “脚本”:{

  • 致:

    ... "server": "live-server public --host=localhost --port=3000 --middleware=../../disable-browser-cache.js" ... }

请注意相对路径似乎已损坏/尴尬... ./ 变为 ../../

我发现了问题 here

另外,如果有人跟随那本书:

  1. packages.json 中的 devDependencies 更改为:

"live-server": "https://github.com/tapio/live-server/tarball/master"

目前从 v1.2.0 升级到 v1.2.1

  1. 最好使用 nvm
  2. 最好安装 Node 的 v13.14(*v14+ 造成其他问题) nvm install v13.14.0
  3. nvm alias default v13.14.0
  4. 使用 npm i -g npm@7.3.0 更新 npm
  5. 运行:npm update
  6. 您也可以使用 npm list 查看依赖关系的层次结构。 (出于某种原因,节点 15 + 最新的 npm 默认仅显示第一级深度 - 一个 la package.json。这使得默认命令毫无意义!您可以附加 --depth=n)以使命令再次变得更有用)。
  7. 您也可以使用 npm audit。存在需要(更新 chokidar 和其他一些软件包)更新版本的问题。 live-server 尚未更新以支持较新的相应 node v 14 库版本。

查看类似帖子 here


脚注: 当您进入 JSX 部分时的另一件事,请在此处查看我的答案: https://stackoverflow.com/a/65430910/495157

当您到达时:

  • 具有道具、状态和子项的高级组件配置。 P182+,节点版本 13 不支持那里的某些依赖项。
  • 稍后也会为此添加调查结果。

答案 17 :(得分:1)

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

npm install redux --save

答案 18 :(得分:1)

如果您正在使用打字稿,并且在安装所有节点模块后遇到错误,请删除package-lock.json。然后运行npm install

答案 19 :(得分:0)

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

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

答案 20 :(得分:0)

就我而言,我没有使用正确版本的 nvm。

答案 21 :(得分:0)

就我而言,

npm install -D tslib @types/node

解决了我的问题,然后我就可以运行了

ts-node index.ts

成功。

答案 22 :(得分:0)

Appsome Solutions中,我们的打字稿项目配置存在相同的问题,并在tsconfig.json中添加了"moduleResolution": "node",来解决了这个问题。

答案 23 :(得分:0)

每次package-lock.json更改时,npm ci应该在运行代码之前运行。假设代码以start npm脚本开头,npm ci可以使用以下prestart npm脚本自动运行

{
  "scripts": {
    "prestart": "npx @olegjs/on-change --file package-lock.json npm ci"
  }
}

答案 24 :(得分:0)

如果软件包安装成功,请转到您的node_modules文件夹,然后检查文件和路径。然后导入。 希望这会有所帮助。

答案 25 :(得分:0)

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

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

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

答案 26 :(得分:0)

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

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

使用Babel编译后,在发布之前:

'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;

实际上已导入包。

希望有所帮助!

答案 27 :(得分:0)

也许和我一样,你设置了“查看引擎&#39;表示不存在的引擎,或试图使用未注册的模板引擎。 确保您使用: app.engine('engine name',engine) app.set('view engine','engine name')

答案 28 :(得分:0)

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

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

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

包含如下:

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

但实际文件名为“s3Uploader.class.js”

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

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

和DUH!

答案 29 :(得分:0)

webpack webpack-dev-middleware 一起使用时遇到此问题。

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

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

通过重新启动过程来修复。

答案 30 :(得分:-1)

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

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

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

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

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

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

执行此操作的原因是更新项目文件夹中的 node-modules 文件夹,其中包含所有必需和必要的文件和依赖。

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

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

然而,这个错误的解决方案对我来说非常愚蠢(和有趣)。我的 selenium 文件夹中已经有chromedriver文件。但是,结果发现上述错误正在发生,因为我的 chromedriver 文件位于 selenium 文件夹中,不在 <内strong> chromedriver 文件夹。因此,创建 chromedriver 文件夹并复制chromedriver文件解决了我的问题!

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

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

希望这有帮助!

答案 31 :(得分:-2)

rm -rf node_modules
npm install
npm fund

对我有用。

答案 32 :(得分:-4)

仅运行以下命令:

npm install

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

答案 33 :(得分:-4)

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

只需删除C:\ Users \ UserName \ AppData \ Roaming \ npm \

然后安装节点。

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

答案 34 :(得分:-43)

更改目录并指向当前项目文件夹,然后&#34; npm install&#34;。

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