
今天刷github,突然看到pm2 v7发布了,简直难以置信。
我有个爱好,就是喜欢使用软件的最新版本,每天都会查看各种软件,开源项目的更新日志。
pm2 v7版本发布,是我意料之外的。
去年虽然更新了一些小版本,但也只是小修小改,打打补丁的状态,这种状态,让我一度以为,pm2止步于此,不会有什么大的更新了。
但今天发布的v7版本,还是让人眼前一亮,接下来仔细分析本次的更新内容。
对了,本文纯古法手打,参考我的大号文章AI时代,你还在坚持手搓文章吗?,欢迎大家一起用心写文章,减少AI对人类精神的污染。
不再支持Nodejs v18以下版本

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

将pm2-axon、pm2-axon-rpc、pm2-io-bpm、pm2-io-agent、fclone作为本地模块,减少模块供应链。
pm2-multimeter 也内置到lib/tools/multimeter目录下,实现了0扩展依赖。
我挺喜欢这个改变的,外部依赖容易把事情搞复杂,直接内置到项目本身,维护起来更方便。
这让我不免猜测,难道是受到了Bun的all 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项目)的开发者来说,这是一次非常值得的升级,快快体验吧。
我是农村程序员,独立开发者,前端之虎陈随易。
- 个人网站 1️⃣:chensuiyi.me
- 个人网站 2️⃣:me.yicode.tech