我无法让 pm2 使用新的 Angular 19.0 版本。
这是我尝试过的:
ng new app
ng build
pm2 start dist/server/server.mjs
节点服务器未侦听任何端口。 该进程在线显示在 pm2 中,但没有记录任何内容。
当我直接使用
node dist/server/server.mjs
启动服务器时,服务器会按预期启动并运行。
如果我降级到 Angular 18.2,服务器将像平常一样使用 pm2 运行。
环境:
我不知道发生了什么,因为日志是空的。我该如何调试这个?
我会回答我自己的问题。 在创建新应用程序时默认生成的
server.ts
文件中,以下行出现在文件末尾:
/**
* Start the server if this module is the main entry point.
* The server listens on the port defined by the `PORT` environment variable, or defaults to 4000.
*/
if (isMainModule(import.meta.url)) {
const port = process.env['PORT'] || 4000;
app.listen(port, () => {
console.log(`Node Express server listening on http://localhost:${port}`);
});
}
isMainModule
函数来自@angular/ssr
包,并且“确定提供的URL是否代表主入口点模块。”
然而,PM2 使用 Node 进程周围的容器来管理它(参见 pm2/lib/ProcessContainerFork.js
)。结果,该函数无法确定是主模块调用了它,条件永远不会满足,进程就在那里停止。