Monorepo中子项目依赖报错:Cannot find module
我在用Lerna管理Monorepo时,子项目引用了其他包的代码,运行时报Error: Cannot find module '@shared/util'。之前用lerna bootstrap安装过依赖,但重启后问题依旧存在。
尝试过手动删除node_modules和package-lock重装,但错误依旧。查看package.json里确实有"@shared/util": "file:../packages/shared"的路径依赖,但IDE也能正常识别路径:
import { formatDate } from '@shared/util'; // 这里IDE没有报错
运行lerna ls显示依赖已经链接,但执行子项目时还是找不到模块。是不是路径配置哪里出错了?
第一步,确认
tsconfig.json或者jsconfig.json里有配置 paths 别名。比如这样:第二步,检查子项目的构建工具配置,比如 Webpack 或 Vite。如果是 Webpack,确保 resolve.alias 配置正确:
如果是 Vite,类似这样配:
第三步,运行
lerna clean -y清理所有 node_modules,然后重新执行lerna bootstrap。这一步是为了确保依赖链接没有问题。如果还是不行,大概率是运行环境没正确加载依赖。可以临时加个调试代码,打印模块的真实路径:
看看是不是路径不对。
最后提醒一下,Lerna 的 symlink 方式有时候会出幺蛾子,建议换成 npm workspace 或者 yarn workspace,更稳一些。