使用PM2启动Node.js应用指定端口报错:未知选项`--port`
解决pm2启动Node.js应用时
unknown option '--port'的报错 嘿,我来帮你搞定这个问题!你遇到的error: unknown option '--port',本质原因是你的Node.js应用代码并没有处理--port这个命令行参数——pm2确实把--port=1336传递给了你的应用,但Node.js本身不知道这个参数是什么,所以抛出了错误。
下面给你两种可行的解决方案,根据你的应用情况选择:
方案1:修改应用代码,支持命令行参数接收端口
如果你的应用目前没有处理命令行参数,需要在app.js里添加逻辑来解析--port参数。
原生Node.js方式(无需额外依赖)
直接通过process.argv提取端口:
// 在app.js的服务器启动代码前添加 const defaultPort = 3000; // 从命令行参数中提取--port的值 const portArg = process.argv.find(arg => arg.startsWith('--port=')); const port = portArg ? Number(portArg.split('=')[1]) : defaultPort; // 然后用这个port启动服务器(以Express为例) const express = require('express'); const app = express(); app.listen(port, () => { console.log(`Server running on port ${port}`); });
修改完代码后,再执行你原来的命令:
pm2 start app.js -i 0 -- --port=1336
用第三方库更规范地处理参数(推荐)
如果需要处理更多命令行参数,建议用yargs或commander这类库,示例用yargs:
- 先安装依赖:
npm install yargs
- 修改
app.js:
const yargs = require('yargs/yargs')(process.argv.slice(2)); const argv = yargs .option('port', { type: 'number', default: 3000, describe: 'Server listening port' }) .parse(); const express = require('express'); const app = express(); app.listen(argv.port, () => { console.log(`Server running on port ${argv.port}`); });
方案2:用环境变量传递端口(无需修改代码,若应用支持)
很多Node.js应用(比如Express默认项目)会自动读取PORT环境变量,这种情况下你根本不用传--port参数,直接用环境变量启动即可:
PORT=1336 pm2 start app.js -i 0
对应的,你的app.js里只需要这样写就能自动识别端口:
const port = process.env.PORT || 3000; app.listen(port, ...);
你可以先检查下你的应用代码里有没有读取process.env.PORT,有的话直接用方案2更简单!
内容的提问来源于stack exchange,提问作者Rahul Kumar




