Monorepo中子项目依赖报错:Cannot find module

___宝玲 阅读 23

我在用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显示依赖已经链接,但执行子项目时还是找不到模块。是不是路径配置哪里出错了?

我来解答 赞 5 收藏
二维码
手机扫码查看
1 条解答
❤一涵
❤一涵 Lv1
这种问题多半是路径解析或者构建工具的配置问题,直接用这个办法解决。

第一步,确认 tsconfig.json 或者 jsconfig.json 里有配置 paths 别名。比如这样:
{
"compilerOptions": {
"baseUrl": ".",
"paths": {
"@shared/*": ["packages/shared/*"]
}
}
}


第二步,检查子项目的构建工具配置,比如 Webpack 或 Vite。如果是 Webpack,确保 resolve.alias 配置正确:
const path = require('path');
module.exports = {
resolve: {
alias: {
'@shared/util': path.resolve(__dirname, 'packages/shared/util')
}
}
};


如果是 Vite,类似这样配:
import { defineConfig } from 'vite';
import path from 'path';
export default defineConfig({
resolve: {
alias: {
'@shared/util': path.resolve(__dirname, 'packages/shared/util')
}
}
});


第三步,运行 lerna clean -y 清理所有 node_modules,然后重新执行 lerna bootstrap。这一步是为了确保依赖链接没有问题。

如果还是不行,大概率是运行环境没正确加载依赖。可以临时加个调试代码,打印模块的真实路径:
console.log(require.resolve('@shared/util'));

看看是不是路径不对。

最后提醒一下,Lerna 的 symlink 方式有时候会出幺蛾子,建议换成 npm workspace 或者 yarn workspace,更稳一些。
点赞 2
2026-02-14 20:17