TypeScript 中找不到模块“X”错误 [已解决]

TypeScript 中找不到模块“X”错误

Cannot find module ‘X’ Error in TypeScript

出现“找不到模块或其相应的类型声明”的原因有多种:

  • 忘记安装第三方包或其类型定义。
  • 有一个有故障的node_modules目录。
  • 指定从中导入的模块的路径不正确。
  • 在 中将该moduleResolution属性设置为不正确的值
    tsconfig.json

安装第三方模块

如果该模块是第三方模块,请确保已安装它。

npm install module-name

如果模块有类型定义,请确保也安装它们。

npm install --save-dev @types/module-name
确保替换module-name为错误消息中的模块名称。

删除你的node_modules并重新安装你的依赖项

尝试删除您的node-modules目录和
package-lock.json文件,重新运行
npm install并重新加载您的 IDE。

bash如果您使用的是 macOS 或 Linux,请在或中发出以下命令zsh

# for macOS and Linux rm -rf node_modules rm -f package-lock.json rm -f yarn.lock # 👇️ clean npm cache npm cache clean --force # 👇️ install packages npm install

如果您使用的是 Windows,请在 CMD 中发出以下命令。

指令
# for Windows rd /s /q "node_modules" del package-lock.json del -f yarn.lock # 👇️ clean npm cache npm cache clean --force # 👇️ install packages npm install

确保重新加载 IDE,因为 VS Code 经常出现故障并需要重新启动。

确保您的导入语句使用一致的大小写

某些操作系统(例如 Windows)将文件名和目录名视为不区分大小写。

但是,macOS 和 Linux 将文件和目录名称视为区分大小写。

确保导入语句中模块的路径没有拼写错误。

索引.ts
import { country } from './myFile'; import { country } from './MyFile';

这两个 import 语句在计算机上执行相同的操作,Windows因为文件名Windows不区分大小写。

但是,如果您在 Linux 或 macOS 等类 Unix 操作系统上运行此代码,您会
收到错误,因为它们区分文件名大小写,并且这是两个完全不同的文件。

最佳实践是使用tsconfig.jsonforceConsistentCasingInFileNames文件中的选项

tsconfig.json
{ "compilerOptions": { "forceConsistentCasingInFileNames": true, // ... } }


forceConcientCasingInFileNames
选项设置为
true时,如果您尝试使用与磁盘上文件名大小写不同的大小写来包含文件,TypeScript 将发出错误。

例如,如果您尝试从 导入MyFile.ts,但文件的名称是
myFile.ts,您会收到错误。

当此选项设置为 时false,TypeScript 遵循其运行的文件系统的区分大小写规则。

如果您团队中的某些开发人员使用 Windows 计算机和其他类 Unix 操作系统,这可能会非常令人困惑,因为如果您尝试通过myFile.ts指定进行导入MyFile.ts,它将在 Windows 上找到,但在 macOS 或 Linux 上找不到。

我还编写了有关
如何从 TS 中的另一个文件导入值的详细指南。

在你的文件moduleResolution设置nodetsconfig.json

如果这没有帮助或者 TypeScript 无法找到本地模块,请尝试
在文件中
moduleResolution设置nodetsconfig.json

tsconfig.json
{ "compilerOptions": { "moduleResolution": "node", // 👇️ ... rest } }

您可以在TypeScript 文档中阅读有关classicvsnode模块解析的
更多信息

如果这没有帮助,请确保 TypeScript 跟踪您尝试导入的模块。

它应该包含在您的include数组设置中,而不是出现在
exclude您的tsconfig.json文件的数组中。

tsconfig.json
{ "compilerOptions": { // ... }, "include": ["src/**/*"], "exclude": ["node_modules", "src/**/*.spec.ts"] }
例如,如果在使用代码片段中的配置时模块不在目录中src,TypeScript 将无法找到它。

确保您没有通过将模块添加到exclude数组来排除该模块。

如果您的错误消息更改为“无法找到模块‘模块名称’的声明文件”,则 TypeScript 已找到您尝试导入的模块,但找不到其类型声明。

如果是这种情况,请查看我的另一篇文章 –
Could not find statements file for module ‘X’ Error

如果您在使用以下任何软件包时遇到错误,请单击相关文章:

结论

当 TypeScript 无法在我们的项目中找到第三方或本地模块时,就会出现“找不到模块或其相应的类型声明”错误。

要解决该错误,请安装该模块并尝试在文件中moduleResolution进行
设置
nodetsconfig.json