You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Lerna命令并行启动多包并指定不同端口?

解决Lerna并行启动多包端口冲突问题

方案1:给每个包配置带固定端口的启动脚本

  1. 分别修改每个package的package.json,添加指定端口的启动脚本:

    • package1:
      "scripts": {
        "start": "react-scripts start", // 保留原启动脚本
        "start:3000": "cross-env PORT=3000 npm run start"
      }
      
    • package2:
      "scripts": {
        "start": "react-scripts start",
        "start:3001": "cross-env PORT=3001 npm run start"
      }
      
    • package3:
      "scripts": {
        "start": "react-scripts start",
        "start:3002": "cross-env PORT=3002 npm run start"
      }
      

    注:cross-env是跨平台设置环境变量的工具,需在根目录或对应包内安装:npm install cross-env --save-dev

  2. 执行Lerna命令一次性启动所有指定脚本:

    lerna run start:* --parallel
    

方案2:通过Lerna命令直接传递端口参数(无需修改包内脚本)

如果项目启动命令支持命令行传参指定端口(比如React的react-scripts start --port <端口号>),可直接在Lerna命令中给每个包单独传参:

lerna run start --parallel --scope package1 -- --port 3000 & lerna run start --parallel --scope package2 -- --port 3001 & lerna run start --parallel --scope package3 -- --port 3002

说明:-- 是Lerna的参数分隔符,用于把后面的参数传递给对应包的start脚本;& 用于终端并行执行多个命令。

方案3:通过环境变量动态指定端口(适合自定义Node服务)

如果包是自定义Node服务,可在代码中读取process.env.PORT环境变量:

// 示例:package1/server.js
const port = process.env.PORT || 3000;
app.listen(port, () => console.log(`Running on port ${port}`));

然后直接在Lerna命令中设置不同环境变量启动:

PORT=3000 lerna run start --parallel --scope package1 & PORT=3001 lerna run start --parallel --scope package2 & PORT=3002 lerna run start --parallel --scope package3

内容的提问来源于stack exchange,提问作者MoDark

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 17:12:22