大家好,我是农村程序员,独立开发者,行业观察员,前端之虎陈随易。我会在这里分享关于 独立开发
、编程技术
、思考感悟
等内容,欢迎关注。
技术群与交朋友请在个人网站联系我,网站 1️⃣:chensuiyi.me,网站 2️⃣:me.yicode.tech。
如果你觉得本文有用,一键三连 (点赞
、评论
、转发
),就是对我最大的支持~
相关文章:Bun v1.2.19 发布,node_modules 隔离,sql 比 node 快 6 倍
我已经 All in Bun
几个月了,怎么 All in 法呢?就是把 本地的Node.js
和 线上的Node.js
全部删除了,完全生活在一个只有 Bun,没有 Node.js 的世界里。
为何如此?因为我的个人习惯就是,要么高度纯粹,要么高度自由。
就像为什么我从业10年都没有用 TypeScript 写过项目?并不是我学不会,而是我无法把 TypeScript 用得纯粹,也就是说,如果我一旦用 TypeScript,那么我就只想处处都是严格的类型,严格的代码。
但很多人的实践证明,这是无法做到的,或者说要耗费非常大的心力才能做到,所以我觉得没有使用的必要,最终还是选择了 JavaScript 的高度自由。
本文并不是让你像我一样,完全抛弃 Node.js 而转投 Bun 的门下,而是想分享一些我的使用经验,给需要的人提供一些参考。我也不建议大家在生产项目中使用 Bun,Node.js 还是更加成熟稳定不易出错的,但推荐大家去看一看 Bun 的文档,理念,功能,去了解一下这个 Bun 的最强有力的竞争者,正在做的事情。

昨天刷到 Bun 的创始人 Jarred Sumner
的一条帖子,将会让 Bun 长期运行的服务内存减少 10 倍,真是令人期待。而 Bun,每天都有帖子分享进展,每周,基本都有一个版本发布,真是一个充满了活力与激情的团队。根据我的个人经验来看,一个东西行不行,主要看负责人是否有自信,是否在积极推进,我非常看好 Bun。
闲言少叙,我的老粉应该知道,我写文章有时候并不是直接分享冷冰冰的技术的,所以会有一些技术之外的思考和感想,如果读者朋友们不喜欢,直接取关我即可,同时也感谢大家的支持与厚爱,昨天关注人数突破 10000。

这是花费了一年半,写了 200 多篇原创文章的成果,不简单,也不容易,但是不累,因为分享技术是我很喜欢的一个事情,做喜欢的事情就不会累。
Bun 在本地的 All in 就不说了,非常简单,直接用 Bun 来替代 Node.js 的一切即可。而如果要想在服务器上 All in Bun,那很有可能就会遇到麻烦。
服务器部署 js 应用,比较常见的方法就是使用 pm2 来进行项目的管理,负载均衡,多进程,平滑重启等等。但如果按照往常 Node.js 的配置方式,Bun 还是需要 Node.js 的配合才能跑起来,那么下面之间把几个要点分享:
- 使用
--bun
参数指定为用 Bun 运行 pm2。 - 使用
-a
参数重启应用,同时包括环境变量更新。 - 指定
bun
为项目的执行程序。 - 给
pm2
命令设置别名。
解决以上几个问题,就能保持 Bun 的纯粹啦,这几个问题,当初可是耗费我不少时间的查找,研究,测试,询问才总结出来,下面详细分享。
package.json 文件
json
{
"scripts": {
"dev": "bun run main.js",
"start": "bunx --bun pm2 start pm2.config.cjs -a"
}
}
首先,package.json
文件中的 start 脚本配置如上,--bun
参数表示使用 bun 来运行 pm2,否则 pm2 还是会默认使用 Node.js 来运行。如果你服务器上面没有 Node.js,就会提示 node 命令不存在,pm2 就跑不起来了。
pm2.config.cjs 文件
js
module.exports = {
apps: [
{
name: 'project1',
instances: 4,
script: './main.js',
exec_mode: 'cluster',
watch: false,
autorestart: true,
interpreter: 'bun',
ignore_watch: ['node_modules', 'logs', 'data'],
max_memory_restart: '200M',
env: {
NODE_ENV: 'production'
}
}
]
};
pm2.config.cjs
文件是 pm2 的配置文件,可以非常方便地把项目的 pm2 部署参数长期保存和修改,这里只需要把 interpreter
参数设置为 bun,script
参数指向运行入口文件即可。
给 pm2 命令设置别名
以上配置完毕,使用 bun run start
,就能把项目跑起来了,如果你还想查看项目的运行日志怎么办?此时,如果你运行 pm2 logs project1
,命令行会提示 node 命令没找到,因为 pm2 是默认使用 node 来执行它的代码的。
此处呢,我们只需要给 pm2 的常用命令设置别名即可,内容如下:
这里为了跟 pm2 进行区别,我特意把命令全部设置为 pm3 前缀了。
这样呢,我们就能直接用别名来查看 pm2 的应用列表,运行状态啦,如果本文有用,麻烦来个一键三连吧,感谢啦~
bash
#!/bin/bash
# PM3 + Bun 别名配置文件
# 使用方法:在 ~/.bashrc 中添加 source ~/.pm3.sh
# 基础 PM3 命令
alias pm3='bunx --bun pm2'
alias pm3v='bunx --bun pm2 -v'
alias pm3list='bunx --bun pm2 ls'
alias pm3status='bunx --bun pm2 status'
# PM3 信息查看
alias pm3info='bunx --bun pm2 info'
alias pm3desc='bunx --bun pm2 describe'
alias pm3show='bunx --bun pm2 show'
# PM3 监控相关
alias pm3monit='bunx --bun pm2 monit'
alias pm3monitor='bunx --bun pm2 monitor'
# PM3 更新和维护
alias pm3update='bunx --bun pm2 update'
alias pm3reset='bunx --bun pm2 reset'
alias pm3kill='bunx --bun pm2 kill'
# PM3 重启应用(支持参数)
pm3rt() {
if [ $# -eq 0 ]; then
echo "用法: pm3r <name|id|all>"
echo "示例: pm3r myapp"
return 1
fi
bunx --bun pm2 restart "$@" -a
}
# PM3 停止应用(支持参数)
pm3st() {
if [ $# -eq 0 ]; then
echo "用法: pm3st <name|id|all>"
echo "示例: pm3st myapp"
return 1
fi
bunx --bun pm2 stop "$@"
}
# PM3 删除应用(支持参数)
pm3dn() {
if [ $# -eq 0 ]; then
echo "用法: pm3dn <name|id|all>"
echo "示例: pm3dn myapp"
return 1
fi
bunx --bun pm2 delete "$@"
}
# PM3 查看应用信息(支持参数)
pm3in() {
if [ $# -eq 0 ]; then
bunx --bun pm2 info
else
bunx --bun pm2 info "$@"
fi
}
# PM3 查看日志(支持参数)
pm3log() {
if [ $# -eq 0 ]; then
bunx --bun pm2 logs
else
bunx --bun pm2 logs "$@"
fi
}
# 快速重启所有应用
pm3ra() {
bunx --bun pm2 restart all
}
# 快速停止所有应用
pm3sa() {
bunx --bun pm2 stop all
}
# 快速删除所有应用
pm3da() {
echo "确定要删除所有 PM3 应用吗? (y/N)"
read -r response
if [[ "$response" =~ ^[Yy]$ ]]; then
bunx --bun pm2 delete all
else
echo "操作已取消"
fi
}
# PM3 状态概览
pm3stat() {
echo "=== PM3 状态概览 ==="
bunx --bun pm2 list
echo ""
echo "=== 系统资源 ==="
bunx --bun pm2 monit --no-daemon
}
# 显示帮助信息
pm3h() {
echo "=== PM3 + Bun 别名帮助 ==="
echo ""
echo " pm3 - PM2 基础命令"
echo " pm3list - 列出所有应用"
echo " pm3status - 显示应用状态"
echo " pm3monit - 打开监控界面"
echo " pm3rt <name> - 重启应用"
echo " pm3st <name> - 停止应用"
echo " pm3dn <name> - 删除应用"
echo " pm3in [name] - 查看应用信息"
echo " pm3log [name] - 查看日志"
echo " pm3ra - 重启所有应用"
echo " pm3sa - 停止所有应用"
echo " pm3da - 删除所有应用(需确认)"
echo " pm3stat - 状态概览"
echo " pm3update - 更新 PM2"
echo " pm3reset - 重置"
echo " pm3kill - 杀死 PM2 守护进程"
echo ""
echo "说明: 大部分命令支持应用名称、ID 或 'all' 参数"
echo "更多帮助: pm3 help"
}
# 设置命令补全(如果支持)
if command -v complete >/dev/null 2>&1; then
# 为主要的 PM3 命令设置补全
_pm3_completions() {
local apps
apps=$(bunx --bun pm2 list --no-header 2>/dev/null | awk '{print $2}' | grep -v '^$')
COMPREPLY=($(compgen -W "$apps all" -- "${COMP_WORDS[COMP_CWORD]}"))
}
complete -F _pm3_completions pm3r pm3st pm3d pm3i pm3desc pm3l pm3log pm3reset
fi