如何用Lerna命令并行启动多包并指定不同端口?
解决Lerna并行启动多包端口冲突问题
方案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- package1:
执行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
相关产品推荐
相关产品推荐

