当前位置: 首页 > article >正文

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]

http://www.kler.cn/a/408898.html

相关文章:

  • python-MatchObject对象方法
  • uni-app 界面TabBar中间大图标设置的两种方法
  • C语言笔记(自定义类型:结构体、枚举、联合体 )
  • 七天掌握SQL--->第四天:事务处理与并发控制
  • C# 特性与反射
  • 【vue3+Typescript】unapp+stompsj模式下替代plus-websocket的封装模块
  • 平面点排序(结构体专题)
  • SpringMVC的理解
  • 基于Springboot+微信小程序的社区论坛系统 (含源码数据库)
  • 推荐一个QDirStat基于 Qt 的目录统计工具
  • MyBatis基本使用
  • Jupyter 导入 - 国内安装 openai 和 python-dotenv 包
  • 实验室管理技术:Spring Boot技术的应用
  • 2025-2026财年美国CISA国际战略规划(下)
  • MySQL底层概述—1.InnoDB内存结构
  • 详细探索xinput1_3.dll:功能、问题与xinput1_3.dll丢失的解决方案
  • 2062:【例1.3】电影票(http://ybt.ssoier.cn:8088/problem_show.php?pid=2062)
  • transform学习
  • MongoDB相关问题
  • 汽车HiL测试:利用TS-GNSS模拟器掌握硬件性能的仿真艺术
  • HTTP工作原理
  • 代码随想录算法训练营第五十四天|Day54 图论
  • 『VUE』34. 异步组件(详细图文注释)
  • 虚幻引擎---初识篇
  • 使用ENSP实现默认路由
  • DataGear 5.2.0 发布,数据可视化分析平台