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 将文件和目录名称视为区分大小写。
确保导入语句中模块的路径没有拼写错误。
import { country } from './myFile'; import { country } from './MyFile';
这两个 import 语句在计算机上执行相同的操作,Windows
因为文件名Windows
不区分大小写。
但是,如果您在 Linux 或 macOS 等类 Unix 操作系统上运行此代码,您会
收到错误,因为它们区分文件名大小写,并且这是两个完全不同的文件。
最佳实践是使用tsconfig.jsonforceConsistentCasingInFileNames
文件中的选项
。
{ "compilerOptions": { "forceConsistentCasingInFileNames": true, // ... } }
当
forceConcientCasingInFileNames
选项设置为true
时,如果您尝试使用与磁盘上文件名大小写不同的大小写来包含文件,TypeScript 将发出错误。
例如,如果您尝试从 导入MyFile.ts
,但文件的名称是
myFile.ts
,您会收到错误。
false
,TypeScript 遵循其运行的文件系统的区分大小写规则。如果您团队中的某些开发人员使用 Windows 计算机和其他类 Unix 操作系统,这可能会非常令人困惑,因为如果您尝试通过myFile.ts
指定进行导入MyFile.ts
,它将在 Windows 上找到,但在 macOS 或 Linux 上找不到。
我还编写了有关
如何从 TS 中的另一个文件导入值的详细指南。
在你的文件moduleResolution
中设置node
tsconfig.json
如果这没有帮助或者 TypeScript 无法找到本地模块,请尝试
在文件中moduleResolution
设置。node
tsconfig.json
{ "compilerOptions": { "moduleResolution": "node", // 👇️ ... rest } }
您可以在TypeScript 文档中阅读有关classic
vsnode
模块解析的
更多信息。
如果这没有帮助,请确保 TypeScript 跟踪您尝试导入的模块。
它应该包含在您的include
数组设置中,而不是出现在
exclude
您的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
进行
设置。node
tsconfig.json