Lerna 4.0.0运行时仅同时启动4个包无法启动全部5个包问题咨询
问题成因
- Lerna 4.0.0 执行
lerna run、lerna exec类批量命令时,默认并发进程数上限为当前设备CPU逻辑核心数减1。常规4核开发机计算得到的默认并发值刚好是4,这是启动时始终随机少1个包的核心原因,不属于npm层面限制,和React 16.14.0版本也无关联。 - 触发该现象的逻辑是:被并发限制拦住的包会进入等待队列,等前面的进程退出释放资源后才会启动,但前端本地开发服务是常驻进程,运行期间不会主动释放进程配额,导致队列里的最后1个包永远不会被拉起。
- 若调整并发配置后仍存在缺包问题,需排查两类配置错误:一是未启动包的
package.json中启动脚本命名和其他包不一致,导致Lerna匹配不到对应脚本;二是多个包配置了相同的本地启动端口,后启动的包会因端口占用直接静默退出,表现和未被拉起一致。
解决方案
- 临时调整启动命令参数:执行启动命令时追加
--concurrency参数显式指定并发数,匹配需要同时启动的包总量即可,例如同时启动5个包的命令为:
# 仅启动所有包的start脚本 lerna run start --concurrency 5 # 需要实时查看所有包的日志输出时,搭配--stream参数使用 lerna run start --stream --concurrency 5
- 永久修改Lerna配置:在项目根目录的
lerna.json中添加全局并发配置,后续执行命令无需重复追加参数,配置示例:
{ "version": "4.0.0", "npmClient": "npm", "command": { "run": { "concurrency": 5, "stream": true } }, "packages": ["packages/*"] }
- 排查端口与脚本配置:逐个核对5个包的本地开发服务端口,确保每个包端口唯一无冲突;同时核对所有包的启动脚本名称,保证和lerna run指定的脚本名完全一致。
内容的提问来源于stack exchange,提问作者Freeman
相关产品推荐
相关产品推荐

