TypeScript Monorepo中如何让Lerna run忽略未安装的开发依赖?
在Lerna monorepo构建生产包时忽略开发依赖的构建
我们在TypeScript单体仓库(monorepo)中使用Lerna,其中Package A将Package B作为开发依赖,Package B自身也有独立依赖。为生产环境构建Package A时,执行以下命令:
npm ci --include-workspace-root --omit=dev -w A npm run lerna -- run build --include-dependencies --scope A
问题:尽管Package B并未被安装,Lerna仍会对其执行build命令,有没有办法让lerna run命令忽略Package A范围内的开发依赖?
可行方案
1. 直接排除指定开发依赖包
用--exclude-dependencies参数明确排除作为开发依赖的Package B,命令修改为:
npm run lerna -- run build --include-dependencies --scope A --exclude-dependencies B
适合依赖关系简单、开发依赖固定的场景。
2. 跳过目标包构建
用--ignore参数直接跳过Package B的构建流程:
npm run lerna -- run build --include-dependencies --scope A --ignore B
3. 调整构建前置流程
如果不想手动指定排除的包,可以先完成全量安装与构建,再清理生产环境的开发依赖:
# 先安装所有依赖(包括dev)并完成构建 npm ci --include-workspace-root npm run lerna -- run build --include-dependencies --scope A # 再为Package A安装生产环境依赖 npm ci --include-workspace-root --omit=dev -w A
这种方式能避免依赖缺失导致的构建报错,同时保证最终生产环境只有必要的依赖。
内容的提问来源于stack exchange,提问作者Avner Levy
相关产品推荐
相关产品推荐

