Node.js 中Cannot find module ‘X’ error 错误

Node.js 中的“Cannot find module”错误有多种原因:

  1. 忘记使用 npm i somePackage 安装第三方包。
  2. 将 node 命令指向一个不存在的文件。
  3. 软件包版本过时,或者 IDE 或开发服务器出现故障。
  4. 忘记为 TypeScript 项目中的包安装类型定义。

要解决 Node.js 中的“Cannot find module”错误,如果是第三方包,请确保安装错误消息中的包,例如 npm i somePackage。 如果在本地模块中遇到错误,请确保将 node 命令指向存在的文件。

如果我们的错误消息包含第三方包名称,例如 “Cannot find module’uuid’”,那么你必须安装uuid包。

在项目的根目录(package.json 文件所在的位置)中打开终端并运行以下命令:

$ npm install uuid

# 👇️ only if you use TypeScript
$ npm install --save-dev @types/uuid

这会将第三方包添加到项目的依赖项中。

如果错误未解决,请尝试删除 node_modules 和 package-lock.json(不是 package.json)文件,重新运行 npm install 并重新启动 IDE。

# 👇️ 删除 node_modules 和 package-lock.json $ rm -rf node_modules $ rm -f package-lock.json # 👇️ 清除 npm 缓存 $ npm cache clean --force $ npm install

如果错误仍然存在,请确保重新启动我们的 IDE 和开发服务器。 VSCode 经常出现故障并需要重新启动。

如果在尝试运行本地文件时遇到“Cannot find module”错误,请确保传递给节点命令的路径指向存在的文件。

例如,如果我们运行 node src/index.js,请确保路径 src/index.js 指向现有文件。

如果我们需要全局安装一个包以便能够在每个目录的命令行上运行它,请使用 -g 标志。

$ npm i -g some-package

# 👇️ 这会将全局安装的包链接到本地 node_modules 文件夹
$ npm link some-package

如果包的全局安装失败,我们可能必须运行以 sudo 为前缀的命令。

# 👇️ 如果遇到权限错误,请使用 sudo 运行
$ sudo npm i -g some-package

$ npm link some-package

npm link 命令创建一个从全局安装的包到当前文件夹的 node_modules/ 目录的符号链接。

如果我们在 TypeScript 项目中遇到错误,请通过运行 npm i -D @types/some-package 安装包的类型定义,并确保类型数组包含字符串节点。

{
  "compilerOptions": {
    "types": [
      "node"
    ]
  },
}

这应该可以修复错误,现在 TypeScript 应该能够找到 cors 模块的类型定义。

如果我们的 Node.js 项目中仍然出现“Cannot find module”错误,请打开 package.json 文件并确保它包含依赖项对象中的包名称。

{
  // ... rest
  "dependencies": {
    "some-module": "^2.8.5",
  },
}

我们可以尝试手动添加该行并重新运行 npm install

$ npm install

或者安装最新版本的包:

$ npm install some-module@latest

如果错误仍未解决,请打开终端并通过运行以下命令检查是否安装了 Node.js:

$ node -v

如果你得到一个版本号,你已经安装了 Node.js,否则通过访问官方 Node.js 页面安装它。

如果由于找不到本地文件而出现错误,请尝试在 node 命令后使用 Tab 键来自动完成我们尝试运行的模块的路径。

如果在开始键入模块路径时没有自动完成,则路径可能不正确。

指向我们尝试运行的模块的路径相对于您打开终端的目录。

我们可以尝试在包含我们尝试运行的文件的目录中打开终端并将其直接传递给节点命令,例如 node index.js

确保项目的路径不包含井号 # 符号或操作系统可能无法解决的任何其他特殊字符。例如,不要使用 my-folder#3/my-project/my-file.js 之类的路径(包含哈希 #)。

目录路径中的特殊字符可能会导致“Cannot find module”错误。

总结

要解决 Node.js 中的“Cannot find module”错误,如果是第三方包,请确保安装错误消息中的包,例如 npm i somePackage。 如果我们在本地模块中遇到错误,请确保将 node 命令指向存在的文件。