我有如下package.json脚本:
"scripts": {
"build": "NODE_ENV=production next build",
"startLocal": "NODE_ENV=production node server.js",
"startServer": "NODE_ENV=production pm2 start server.js",
}
现在,我的应用程序将NextJS与自定义Express服务器一起使用。 server.js 看起来像这样:
const { parse } = require('url');
const express = require('express');
const next = require('next');
const env = process.env.NODE_ENV || 'development';
const port = parseInt(process.env.PORT, 10) || 3000;
const app = next({ dev: env === 'development' });
const handle = app.getRequestHandler();
app.prepare().then(() => {
const server = express();
server.get('*', (req, res) => {
handle(req, res, parse(req.url, true));
});
server.listen(port, (err) => {
if (err) throw err;
console.info(`> Ready on port ${port}`);
});
});
要构建我的应用,我首先运行npm run build
。然后,我在特定的端口号PORT=3030 npm run startLocal
上启动该应用程序。这按预期工作。但是,当我将脚本用于PM2启动PORT=3030 npm run startServer
时,它不会选择端口号,而是在端口3000上启动。
这是为什么?我的package.json脚本中需要在PM2命令中添加其他内容吗?
答案 0 :(得分:0)
pm2仅了解环境变量NODE_PORT(而不是PORT),因此我认为您需要使用PORT=3030 NODE_PORT=3030 npm run startServer
,以便将其传递给next和pm2。