有生之年系列,Nodejs进程管理pm2 v7.0发布

今天刷github,突然看到pm2 v7发布了,简直难以置信。

我有个爱好,就是喜欢使用软件的最新版本,每天都会查看各种软件,开源项目的更新日志。

pm2 v7版本发布,是我意料之外的。

去年虽然更新了一些小版本,但也只是小修小改,打打补丁的状态,这种状态,让我一度以为,pm2止步于此,不会有什么大的更新了。

但今天发布的v7版本,还是让人眼前一亮,接下来仔细分析本次的更新内容。

对了,本文纯古法手打,参考我的大号文章AI时代,你还在坚持手搓文章吗?,欢迎大家一起用写文章,减少AI对人类精神的污染。

不再支持Nodejs v18以下版本

前几天,Nodejs v20刚刚结束支持,我倒是认为,不如直接一步到位,放弃Nodejs v20以下的支持。

模块本地化

pm2-axonpm2-axon-rpcpm2-io-bpmpm2-io-agentfclone作为本地模块,减少模块供应链。

pm2-multimeter 也内置到lib/tools/multimeter目录下,实现了0扩展依赖

我挺喜欢这个改变的,外部依赖容易把事情搞复杂,直接内置到项目本身,维护起来更方便。

这让我不免猜测,难道是受到了Bunall in one思想影响?

添加了 Bun 支持

其实pm2 v6.x也是可以基于bun运行的,我自己的项目已经跑了1-2年了。

json 复制代码
module.exports = {
    apps: [
        {
            name: "app",
            script: "index.js",
            interpreter: "bun",

            // 集群模式配置
            instances: 4, // 实例数量,可设置为 'max' 使用所有 CPU
            exec_mode: "cluster", // 集群模式

            // 自动重启配置
            autorestart: true,
            watch: false,
            max_restarts: 20,
            max_memory_restart: "500M", // 内存超过 500M 自动重启

            // 日志配置
            log_date_format: "YYYY-MM-DD HH:mm:ss",
            merge_logs: true,

            // 从 .env.production 动态加载的环境变量(使用 Bun API)
            env: {
                RUN_MODE: "production"
            }
        }
    ]
};

我的配置如上,另外,还要把运行脚本改成bunx --bun pm2 start pm2.config.cjs,这样就实现了完全使用Bun来开发项目,来运行pm2管理项目。

所以,我已经有将近2年没有运行过nodejs,npm,pnpm等命令了,全部Bun一把梭。

使用 fetch 替换 needle

needle是一个Nodejs早期版本非常流行的http请求库,不过随着js标准的升级,原生的fetch已经是很多请求库的替代品。

命令行提示替换第三方依赖

enquirer这个包,最后更新于三年前,早就过时了。

后面早已被inquirer这个更强大,更完善的命令行提示库替代,而且更新维护也非常积极。

但官方显然不止于此,大刀阔斧的裁剪一番,连命令行提示也使用了内置的轻量级实现。

promptly 这个5年前就不更新的提示库,也换成了内置的 lib/tools/prompt 实现。

更多原生实现替换三方依赖

随着Nodejs的升级,递归创建目录 fs.mkdirSync({ recursive: true }) 替换了第三方依赖 mkdirp

process.setSourceMapsEnabled() 替换了第三方依赖 source-map-support

JavaScript的模板语法 替代了第三方依赖 sprintf-js 模板语法的模拟实现。

语言原生的 URL 替换了第三方依赖 url.parse() 实现。

pm2 serve添加--ftp参数

可以通过pm2 serve --ftp列出服务器目录列表。

安全更新和BUG修复

  • CVE-2025-5891修复字符串到数组分割正则表达式中的 ReDoS Config.js

  • CVE-2026-27699将proxy-agent更新至6.5.0,basic-ftp更新至5.3.1

  • 修复 open() 中的命令注入WebAuth.js --- 用 execFile()替换 exec()

  • 修复 open() 中的命令注入 PM2IO.js --- 用 execFile() 替换 exec(),验证 SUDO_USER

  • 修复 lib/tools/open.js 中的命令注入------用 execFile() 替换 exec(),验证SUDO_USER

  • 通过 proto key 遍历修复 Configuration.set/unset 中的原型污染

  • 修复 HttpInterface 环境剥离从未执行(WEB_STRIP_ENV_VARS)

  • 重写 TreeKill:单 ps 快照 + 内存树构建,消除竞态条件。SIGKILL 升级现在直接针对幸存的子进程,而不是重新遍历死树

  • 修复 [object Object] env vars泄漏到分支模式子进程

  • 修复Windows主路径:使用 os.homedir()代替 HOMEPATH/HOMEDRIVE环境变量

  • 修复 Windows TreeKill 回调一致性

  • 修复 Bun 集群模式中缺少的 BPM 监测注入(ProcessContainerBun.js)

  • 修复 Bun 集群控制台在 ReferenceError 发生崩溃时会覆盖 disable_logs

  • 修复 CliAuth 错误凭证错误,显示"未定义"而非错误信息

以上就是本次更新内容了,作为一个长期使用pm2来管理服务器上nodejs项目(现在是bun项目)的开发者来说,这是一次非常值得的升级,快快体验吧。


我是农村程序员,独立开发者,前端之虎陈随易,技术群与交朋友请在个人网站 👇 联系我 ✌️

相关推荐
ayqy贾杰1 小时前
Cursor SDK发布!开发者可直接搬走其内核
前端·vue.js·面试
椰猫子1 小时前
SpringMVC(SpringMVC简介、请求与响应(请求映射路径、请求参数、日期类型参数传递、响应json数据))
java·前端·数据库
love530love2 小时前
如何在 Google Chrome 中强制开启 Gemini AI 侧边栏(完整图文教程)
前端·人工智能·chrome·windows
光影少年2 小时前
对typescript开发框架的理解?
前端·javascript·typescript
跨境数据猎手2 小时前
反向海淘代购系统:1688 / 淘宝自动代采 + API 同步(附可用源码)
前端
lUie INGA2 小时前
Go-Gin Web 框架完整教程
前端·golang·gin
a1117762 小时前
“像风之翼“无人机巡检平台仪表盘
前端·javascript·开源·html·无人机
李白的天不白2 小时前
vue 数据格式问题
前端·vue.js·windows
a1117762 小时前
QQ 宠物(怀旧 开源)前端electron项目
前端·开源·html