Windows用pm2部署node.js项目
Windows上pm2启动命令不生效
按照常规启动命令应该如下,但是发现不生效
pm2 start npm --name "project-name" -- start
具体如下,可以看到状态都是stopped
$ pm2 start npm --name "chatgpt-next-web" -- start
[PM2] Starting F:\PROGRAMFILES\NODEJS\NPM.CMD in fork_mode (1 instance)
[PM2] Done.
┌────┬────────────────────┬──────────┬──────┬───────────┬──────────┬──────────┐
│ id │ name │ mode │ ↺ │ status │ cpu │ memory │
├────┼────────────────────┼──────────┼──────┼───────────┼──────────┼──────────┤
│ 0 │ chatgpt-next-web │ fork │ 8 │ stopped │ 0% │ 0b │
│ 1 │ chatgpt-next-web │ fork │ 1 │ stopped │ 0% │ 0b │
└────┴────────────────────┴──────────┴──────┴───────────┴──────────┴──────────┘
后面参考了这篇文章:https://pm2.fenxianglu.cn/docs/start#启动-npmyarnpnpm-应用 的方法才生效,猜测是Windows和Linux环境的差异导致的。
启动 npm/yarn/pnpm 应用
以 npm
为例:
$ pm2 start -n demo npm -- run dev
警告:上面这种方式仅适用到 linux 系统,window 系统无效且报错
不过 window 系统可以这样
项目根目录创建 ecosystem.config.js
配置:
module.exports = {
apps: [
{
name: "demo",
cwd: "./",
script:
"C:\\Users\\zhangsan\\AppData\\Roaming\\nvm\\v16.16.0\\node_modules\\npm\\bin\\npm-cli.js", // npm-cli.js路径
args: "run dev",
},
],
};
项目根目录执行命令:
$ pm2 start
另一种方式,不适应所有版本,了解下即可:
项目根目录创建 launch.js
内容:
const exec = require("child_process").exec;
exec("npm run dev", { windowsHide: true });
启动
$ pm2 start ./launch.js
测试使用 ecosystem.config.js
配置启动
1.同上,项目根目录创建 ecosystem.config.js,并修改实际路径;
2.运行 pm2 start
$ pm2 start
[PM2] Applying action restartProcessId on app [chatgpt-next-web](ids: [ 0, 1 ])
[PM2] [chatgpt-next-web](0) ✓
[PM2] [chatgpt-next-web](1) ✓
┌────┬────────────────────┬──────────┬──────┬───────────┬──────────┬──────────┐
│ id │ name │ mode │ ↺ │ status │ cpu │ memory │
├────┼────────────────────┼──────────┼──────┼───────────┼──────────┼──────────┤
│ 0 │ chatgpt-next-web │ fork │ 8 │ online │ 0% │ 44.0mb │
│ 1 │ chatgpt-next-web │ fork │ 16 │ stopped │ 0% │ 0b │
└────┴────────────────────┴──────────┴──────┴───────────┴──────────┴──────────┘
可以看到有一个状态已经变成online
了。
ps:需要注意,用这种会弹cmd窗口,一开始会弹好几次,最后只剩下一个还是两个,如果你把他们都关掉,它立刻又会弹出来一个,感觉有点像是守护进程,那个窗口偶尔能看到 next-router-worker
为标题。
扩展:pm2常用命令
# 启动应用
pm2 start
# 停止某个应用
pm2 stop name
# 删除某个应用
pm2 delete name
# 查看应用列表
pm2 list
# 查看各应用状态
pm2 status
# 查看日志,可指定应用
pm2 log [name]