internal/modules/cjs/loader.js:582 抛出错误

150

我在控制台中收到以下错误信息:

Error : Cannot find module

这是完整的错误信息。我该怎么办?

internal/modules/cjs/loader.js:582
    throw err;
    ^

Error: Cannot find module 'C:\Users\User\Desktop\NodeJsProject\app.js'
    at Function.Module._resolveFilename (internal/modules/cjs/loader.js:580:15)
    at Function.Module._load (internal/modules/cjs/loader.js:506:25)
    at Function.Module.runMain (internal/modules/cjs/loader.js:741:12)
    at startup (internal/bootstrap/node.js:285:19)
    at bootstrapNodeJSCore (internal/bootstrap/node.js:739:3)

caseyjustus、ttfreeman、Bishwajit Vikram、Muhammad Tahir、Andrew Koper 的答案都有一个共同点,即问题中的错误出现在调用 node 时对_不存在的文件_进行操作。(!) -- 请考虑阅读 https://dev59.com/DlQJ5IYBdhLWcg3wlm7B。 - Henke
我曾经遇到过同样的问题。我将webpack-dev-server降级到2.5.1版本,现在一切都正常了。 - Nikita Bhutada
我通过使用yarn而不是npm解决了这个问题。 - Áron Pop Adorján
如果使用了 nvm run 而不是 npm run,也可能会看到此错误。 - Gayan Weerakutti
在运行npm run serve:ssr的dist文件夹时,我遇到了这个错误。为什么dist文件夹依赖于node_module? - Santosh
46个回答

204

适用于所有操作系统 => Windows、Linux、Mac

  1. 删除 node_modules 目录
  2. 删除 package-lock.json 文件
  3. 运行 npm install
  4. 运行 npm start

适用于 Linux 操作系统

rm -rf node_modules package-lock.json && npm install && npm start

23
我注意到这个答案已经获得了很多赞同。然而,我强烈建议在这里给出的建议要谨慎。caseyjustus、ttfreeman、Bishwajit Vikram、Muhammad Tahir、Andrew Koper的答案都有一个共同点,即当在“实际不存在的文件”上调用node时,问题中的错误就会出现。只有在所有其他方法都失败时,重新安装Node.js才应该是最后的选择。你可以先阅读这个答案,这样就可以避免一些麻烦。 - Henke
@HenkeMaybe 的答案可能改变了,但它重新安装依赖项,而不是 node.js。 - reducing activity
这个答案的要点是“更新所有内容”。在我的情况下,尝试运行jsdoc时出现问题的不是node_modules,而是node本身。在我升级了nodejs(使用choco upgrade nodejs)从版本13.0.1到19.6.0之后,JSDoc开始正常工作。 - Peer Sommerlund
是的,@Henke说得对 - 我在错误的目录中。所以该文件不在那里。一旦我切换到正确的目录,它就可以工作了。嗯。另一方面,如果NodeJs只是说“找不到文件!”而不是这个听起来很严重的错误,那就好了! - a20
完成上述步骤后,复制.env.example(如果存在则复制,否则创建新文件),并将其重命名为.env。 - inhaq
显示剩余4条评论

38

我第一次尝试使用node js时也遇到了同样的问题。
我注意到这个问题发生在我有一些相同名称的.js文件位于不同目录,但都在同一个主目录中的情况下。
我在主项目文件夹外创建了另一个目录,并创建了一个.js文件。
之后,它就运行正常了。
例如- app.js


171
我不了解你的意思。 - Tito
1
@Tito 在我的情况下,我正在运行一个 package.json 脚本,其中是 node 'Server/index.js',而应该改为 node index.js。我认为这个答案的翻译也是如此。 - Andrew

27

请尝试以下命令

移除 node_modulespackage-lock.json

rm -rf node_modules package-lock.json

然后运行以下命令安装依赖

npm install

最后,按照下面的命令运行您的软件包。

npm start

7
对我没用。 - jkalandarov

9
我的建议是将正在使用的 .js 文件放在新文件夹中,将该文件夹拖放到 VS Code 中(以直接在 VS Code 中打开目录),在 VS Code 中打开终端,然后简单地键入node <filename>.js(或在我这种情况下是node index.js)。
我已经在系统上安装了node,但出现了你提到的错误,即使我输入了文件的直接路径,例如node /desktop/index.js也无济于事。
因此,在桌面上创建一个新文件夹,将.js文件放在其中,在 VS Code 中打开该文件夹,然后在终端中键入node index.js可以解决我的问题。

8

1. 读错误信息!

请仔细阅读错误信息。 第二部分的第一行说:

Error: Cannot find module 'C:\Users\User\Desktop\NodeJsProject\app.js'

因此,首先要检查的是:文件是否存在?

在Windows上,打开命令提示符(WinKey+r,输入cmd,按Enter)。运行:

dir C:\Users\User\Desktop\NodeJsProject\app.js

如果响应是 - 系统找不到指定的路径。 - 或者 - 文件未找到 - 那么你就知道该文件不存在
同样,在Linux/Unix上(在我这种情况下是Windows上的MSYS2),运行:
$ ls "C:\Users\User\Desktop\NodeJsProject\app.js"
ls: cannot access 'C:\Users\User\Desktop\NodeJsProject\app.js': No such file or directory

因此,如果在Linux上出现没有这样的文件或目录,那么你就知道该文件不存在

2. 尝试运行npm install

如果上面第1部分没有解决您的问题,请尝试运行npm install,然后运行npm start

3. 最后的办法:尝试this answer

如果以上方法都无法解决您的问题,我的最后建议是:

  1. 删除node_modules目录,
  2. 删除package-lock.json文件,
  3. 运行npm install
  4. 运行npm start

4. 如果错误发生在VS Code中

注意
Visual Studio Code中进行调试时,错误可能会出现无法预料的原因。
如果您在VS Code中遇到错误,请查看this answer是否有帮助。

5. 如何重现您的错误

假设您已经在计算机上安装了Node.js。
如果没有,请下载并安装。

错误消息很容易重现。 安装完Node.js后,打开命令行,并运行:

$ node thisFileDoesNotExist.js
node:internal/modules/cjs/loader:1078
  throw err;
  ^

Error: Cannot find module 'C:\thisFileDoesNotExist.js'
[90m    at Module._resolveFilename (node:internal/modules/cjs/loader:1075:15)[39m
[90m    at Module._load (node:internal/modules/cjs/loader:920:27)[39m
[90m    at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:81:12)[39m
[90m    at node:internal/main/run_main_module:23:47[39m {
  code: [32m'MODULE_NOT_FOUND'[39m,
  requireStack: []
}

Node.js v18.14.2

6. 如何在没有错误的情况下运行node <someFile.js>

要在终端中无错误地运行Node.js,在Windows命令行中运行:

echo console.log('\nHello world!')> hello.js
node hello.js

在 Linux 终端中,尝试输入:
echo "console.log('\nHello world\!\n')"> hello.js
node hello.js

在这两种情况下,都应该期望响应为:
Hello world!

如果您刪除了hello.js,然後運行node hello.js,您應該再次收到您問的錯誤。

參考資料


1
对于 Windows 系统:node_modules 位置为 %appdata%\npm\node_modules - Carson

7

我遇到了同样的错误,因为我的文件名末尾有一个空格(不是引用,而是实际文件名)。一旦我把'app.js '改为'app.js',它就正常工作了。


我遇到了同样的问题,文件名中有空格 :) - Prince Sodhi

6

用正在运行服务器端代码的文件(应该为app.jsmain.jsstart.jsserver.js或您选择的任何其他文件)替换package.json中的文件名({"npm":<your server code file name>.js})。


6

对于那些使用 TypeScript 的人来说,这是由于在你的设置中 compilerOptionsincremental 选项引起的。

这会导致构建 tsconfig.tsbuildinfo 文件,该文件存储了所有缓存数据。如果您删除该文件并重新编译项目,则应立即解决问题。


5

这个 .js 文件位于应用程序的子文件夹(/src)中,而终端在一般的应用程序文件夹中(其中包含所有的包文件、模块、公共文件夹、src 文件夹),它报错了。前往应用程序的 (/src) 文件夹解决了我的问题。


5

我在使用Docker运行nodemon时遇到了类似的问题,

建议检查你的package.json文件中的"main"字段是否正确指向了入口文件。

请在package.json中进行检查。

"main": "server.js",
"scripts": {
    "start":"nodemon src/server.js",
    "docker:build": "docker build -f ./docker/Dockerfile . "
  },

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