Windows用pm2部署node.js项目

Windows上pm2启动命令不生效

按照常规启动命令应该如下,但是发现不生效

shell 复制代码
pm2 start npm --name "project-name" -- start

具体如下,可以看到状态都是stopped

shell 复制代码
$ 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 为例:

shell 复制代码
$ pm2 start -n demo npm -- run dev

警告:上面这种方式仅适用到 linux 系统,window 系统无效且报错

不过 window 系统可以这样

项目根目录创建 ecosystem.config.js 配置:

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",
    },
  ],
};

项目根目录执行命令:

shell 复制代码
$ pm2 start

另一种方式,不适应所有版本,了解下即可:

项目根目录创建 launch.js 内容:

js 复制代码
const exec = require("child_process").exec;
exec("npm run dev", { windowsHide: true });

启动

shell 复制代码
$ pm2 start ./launch.js

测试使用 ecosystem.config.js 配置启动

1.同上,项目根目录创建 ecosystem.config.js,并修改实际路径;

2.运行 pm2 start

shell 复制代码
$ 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常用命令

shell 复制代码
# 启动应用
pm2 start
# 停止某个应用
pm2 stop name
# 删除某个应用
pm2 delete name
# 查看应用列表
pm2 list
# 查看各应用状态
pm2 status
# 查看日志,可指定应用
pm2 log [name]
相关推荐
搏博6 小时前
基于Python3.10.6与jieba库的中文分词模型接口在Windows Server 2022上的实现与部署教程
windows·python·自然语言处理·flask·中文分词
你的人类朋友8 小时前
【Node&Vue】JS是编译型语言还是解释型语言?
javascript·node.js·编程语言
Orange30151113 小时前
《深入源码理解webpack构建流程》
前端·javascript·webpack·typescript·node.js·es6
有梦想的攻城狮15 小时前
Java 11中的Collections类详解
java·windows·python·java11·collections
忒可君15 小时前
C# winform FTP功能
开发语言·windows·c#
十五年专注C++开发15 小时前
CMake进阶: CMake Modules---简化CMake配置的利器
linux·c++·windows·cmake·自动化构建
degree52016 小时前
全平台轻量浏览器推荐|支持Win/macOS/Linux,极速加载+隐私保护+扩展插件,告别广告与数据追踪!
windows·macos·电脑
Clownseven17 小时前
Docker+Nginx+Node.js实战教程:从零搭建高可用的前后端分离项目
nginx·docker·node.js
PineappleCoder21 小时前
同源策略是啥?浏览器为啥拦我的跨域请求?(一)
前端·后端·node.js
stoneSkySpace1 天前
pnpm 和 npm 差异
前端·npm·node.js