如何解决“找不到模块”错误使用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.jsnode.js:201throw 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)

我真的很想知道这里发生了什么,但是我有点不知道下一步该去哪里看。有什么建议吗?

2625760 次浏览

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

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

更新(8/2019):

现在,您可以使用package-lock.json文件,它是在npm修改您的node_modules目录时自动生成的。因此,您可以省略签入包,因为package-lock.json跟踪您当前使用的node_modules的确切版本。要从package-lock.json而不是package.json安装包,请使用命令npm ci

更新(2016年3月):

我的回应受到了很多批评,特别是我检查了我的代码所依赖的包。几天前,有人取消了他们所有的包(https://kodfabrik.com/journal/i-ve-just-liberated-my-modules),这破坏了React、Babel和几乎所有其他东西。希望现在很清楚,如果你有生产代码,你不能依靠NPM来为你维护你的依赖项。

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

rm -rf node_modulesnpm install

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

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

npm install --save module_name

例如,如果错误是:

{[错误:找不到模块'/root/. npm/form-data']代码:'MODULE_NOT_FOUND'}

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

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

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

我试图发布我自己的包,然后将其包含在另一个项目中。我遇到这个问题是因为我如何构建第一个模块。我使用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;};

所以在另一个项目(没有ES2015)中的npm install module-name之后,我不得不做

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

真正把包裹进口了。

希望有帮助!

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

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

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

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

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

我已经通过在nvm设置生效时重新启动pm2来修复它。也应该修复启动脚本。

从项目中删除node_module根文件夹(例如:myApp)。转到myApp文件夹,然后从终端

键入以下命令
>myApp>npm install

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

我昨天遇到了这个错误。我花了一段时间才意识到package.json中的main条目指向我移动的文件。一旦我更新,错误就消失了,包就起作用了。

PRO提示:

这个错误发生在我身上,在与疲劳和轻微疾病作斗争时,因为我输入了node blah而不是npm blah

收到的错误消息还没有愤怒到足以提醒我自己的愚蠢!

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

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

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

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

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

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

这样做的原因是更新节点-模块文件夹,在我们的项目文件夹中,包含所有必需和必要的文件和依赖项。

(下面的部分可能与这个问题无关,但如果有人遇到我面临的同样情况,可能会有所帮助。

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

然而,这个错误的解决方案对我来说非常愚蠢(和有趣)。我已经在我的文件夹中有了chromeDrive文件。但是,事实证明,上面的错误是因为我的ChromeDrive文件在文件夹和不在里面镀铬河文件夹中。所以,创建一个ChromeDrive文件夹并复制chromeDrive文件解决了我的问题!

此外,对于错误:等待WebDriver Server超时,您可以将此代码行添加到#0中的conf.js文件:

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

希望这有帮助!

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

单个文件变成了文件夹

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

通过重新启动进程修复。

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

我还遇到了无法找到模块错误,但奇怪的是,在我的本地(Mac托管)Node.js环境中,一切都运行得很好。

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

包含看起来像这样:

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

但实际的文件被称为“s3Uploader.class.js”

请注意代码和文件名之间的's'与'S'的大小写差异。

所以-在这里没有其他解决方案解决您的问题的奇怪机会中,三重检查您没有错误地包含文件名中的字符!:)

还有DUH!

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

在将一个基于browserify的模块转换为一个可运行的模块时发现的;browserify不关心缺少的main字段,因此错误没有被注意到。

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

指定restler文件夹的路径,它将位于node_modules文件夹中,例如:var rest=需要('./node_modules/restler');

这对我有用。

对于TypeScript用户,如果您正在导入一个内置的Node模块(例如httppathurl),并且您收到了一个错误,例如"Cannot find module "x",那么可以通过运行来修复错误

npm install @types/node --save-dev

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

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

npm install redux --save

也许像我一样,您将Express中的“查看引擎”设置为不存在的引擎,或者尝试使用未注册的模板引擎。确保您使用:app.engine('引擎名称',引擎)app.set('查看引擎','引擎名称')

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

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

如果这个问题在CLI v3中仍然是一个问题。谢谢!

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

sudo rm -rf /usr/local/{lib/node{,/.npm,_modules},bin,share/man}/{npm*,node*,man1/node*}
https://nodejs.org/en/download/

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

如果所有其他方法都不适合你…试试看

npm link package_name

例如

npm link webpacknpm link autoprefixer

e. t. c

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

我不断得到:

Error: Cannot find module './disable-browser-cache.js'...

我不得不调整我的package.json

  • 发件人:

    …"server":"实时服务器公共--host=localhost--port=3000--middleware=./disable-browser-cache.js"…}脚本格式

  • 致:

    …"server":"实时服务器公共--host=localhost--port=3000--middleware=…/…/disable-browser-cache.js"…}

注意相对路径似乎破碎/尴尬……./变成了../../

我发现问题这里

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

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

"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. 更新npmnpm i -g npm@7.3.0
  5. 运行:npm update
  6. 你也可以使用npm list来查看依赖关系的层次结构。(由于某种原因,节点15+最新的npm默认只显示第一层深度-package.json.这使得默认命令毫无意义!您可以附加--depth=n)以使命令再次更有用)。
  7. 您也可以使用npm audit。存在需要(更新chokidar和其他一些包)到较新版本的问题。live-server尚未更新以支持较新的相应节点v 14库版本。

类似文章这里


脚注:另一件事当你到达JSX部分时,在这里查看我的答案:https://stackoverflow.com/a/65430910/495157

当你到达:

  • 带有道具、状态和子级的高级组件配置。P182+,节点版本13不支持那里的某些依赖项。
  • 稍后也将为此添加调查结果。
rm package-lock.jsonrm -r node_modulesnpm i

这应该修复问题并安装所有软件包。

在我的情况下,

npm install -D tslib @types/node

解决了我的问题,我就可以跑了

ts-node index.ts

成功。

在我的情况下,我没有使用正确版本的nvm。

一个罕见但也可能的情况是模块名称中的错字。当执行node .\util.js时,我错过了文件名中的“s”,它应该是node.\utils.js,并且在这个问题的所有答案中没有找到任何解决方案,直到我发现即使我删除了所有内容也无法运行该文件!

显然,从这个问题来看,有很多可能的原因。

也许这会帮助某人,希望没有人像我一样愚蠢地使用这种技术:

检查是否有任何node_modules文件夹向上文件夹树。

情景1:如果你曾经有一个项目文件夹,你在多个项目之间共享一个node_modules文件夹,你可能没有任何问题

|- projects| |- node_modules     <- OK| |- project1         <- No node_modules folder| | |- package.json| |- project2         <- No node_modules folder| | |- package.json

情景2:如果您添加了第三个不同性质的项目,您可以选择在该项目中保留node_modules文件夹:

|- projects| |- node_modules     <- Can be used by project 3| |- project1         <- No node_modules folder| | |- package.json| |- project2         <- No node_modules folder| | |- package.json| |- project3| | |- node_modules   <- Packages for project 3 only| | |- package.json

我猜项目3的节点类型文件夹中的一些包依赖于它在父文件夹的node_modules文件夹中找到(或找不到)的包。即使您希望在项目3的node_modules文件夹中找到依赖项。也许是因为一些包的导入和引用方式?

不用说,这是一场等待发生的灾难:)

我在升级节点版本以及安装几个不同的包版本时遇到了这个问题。该项目创建了一个docker映像/容器来工作。

问题是当我添加一个包并重建项目时,没有重新创建Docker映像。正确的信息在我的本地package.json和package-lock.json文件中。

删除docker镜像而不仅仅是容器解决了我的问题。

  • 逐步运行以下命令。它修复了我的问题:

npm缓存清理-force
rmpackage-lock.json
rm-rnode_modules
npm i--保存-遗留-点对点