Monorepo中使用@typescript-eslint/utils遇模块查找错误求解决
解决Monorepo中@typescript-eslint/utils找不到模块的问题
问题分析
你遇到的核心矛盾是:直接导入@typescript-eslint/utils时TypeScript找不到模块/类型,强行导入./dist子路径又违反了包的exports规范导致运行报错。这本质是Monorepo下TypeScript模块解析策略不匹配、依赖安装不规范或版本不一致导致的。
解决方案
1. 修正TypeScript模块解析配置
@typescript-eslint/utils使用了Node.js的exports字段规范导出路径,要求TypeScript使用兼容的模块解析策略:
- 修改子包
packages/eslint-plugin-foo/tsconfig.json,确保moduleResolution设置为NodeNext或Node16:{ "extends": "../../tsconfig.json", "compilerOptions": { "moduleResolution": "NodeNext", "module": "NodeNext", // 与moduleResolution匹配,确保ES模块解析正确 "rootDir": "./src", "outDir": "./dist" }, "include": ["src/**/*"] } - 根目录的
tsconfig.json也需要同步设置moduleResolution为NodeNext或Node16,避免配置冲突。
2. 规范依赖安装与Monorepo链接
- 确保
@typescript-eslint/utils作为开发依赖正确安装在子包中,而非仅根目录:cd packages/eslint-plugin-foo npm install @typescript-eslint/utils --save-dev - 若使用pnpm/yarn workspace,删除子包的
node_modules和锁文件,重新安装以确保依赖正确链接:rm -rf packages/eslint-plugin-foo/node_modules rm package-lock.json # 对应替换为pnpm-lock.yaml或yarn.lock npm install
3. 统一@typescript-eslint系列包版本
版本不匹配是类型找不到的常见原因,确保子包中所有@typescript-eslint相关包版本一致:
// packages/eslint-plugin-foo/package.json "devDependencies": { "@typescript-eslint/eslint-plugin": "^6.0.0", "@typescript-eslint/parser": "^6.0.0", "@typescript-eslint/utils": "^6.0.0" }
4. 恢复标准导入路径
不要直接导入./dist子路径,保持原导入语句即可:
import { ESLintUtils, TSESTree } from '@typescript-eslint/utils';
只要上述配置修正完成,TypeScript就能通过正确的模块解析找到包的类型和代码。
内容的提问来源于stack exchange,提问作者junep
相关产品推荐
相关产品推荐

