宝塔面板「切换 node 版本」仅修改软链接和默认别名,不更新pm2实际运行路径;必须用绝对路径启动pm2或在ecosystem.config.js中硬编码interpreter字段,否则process.version不会改变。

宝塔面板「切换 Node 版本」按钮根本没用
点完「切换版本」再重启项目,process.version 还是旧的,npm install 报 ERR_UNSUPPORTED_ES_VERSION 或 node-gyp rebuild 失败——这不是你操作错了,是面板这个功能本身就不改进程实际执行路径。它只改了 /www/server/nvm/alias/default 和软链 /www/server/nodejs/node,但 PM2 启动时压根不看这个,而是读系统 PATH 或上一次启动时缓存的解释器路径。
真正生效的方式只有两个:
- 手动用绝对路径启动 PM2:
/www/server/nodejs/18.19.1/bin/node /www/server/nodejs/18.19.1/bin/pm2 start app.js --name my-app - 在
ecosystem.config.js里硬编码interpreter: '/www/server/nodejs/18.19.1/bin/node' - 别信面板「PM2 管理器」界面上的「Node 版本」下拉菜单,它只是个装饰,点完不生效
用 nvm 装的 Node 版本,PM2 就是找不到 node 命令
你在终端里 nvm use 18.19.1 后 node -v 显示正确,但 pm2 start 仍报 command not found: node——这是因为 PM2 后台进程不加载你的 .bashrc,nvm 的环境变量和 PATH 扩展全失效了。
必须让 PM2 明确知道该用哪个二进制:
DMap GL地图JSAPI(dmapgl)开发指南。用于编写、审查、调试 DMap 地图 API 代码,涵盖地图初始化、覆盖物渲染、图层管理、事件处理、控件交互等任务。当用户提及 dmap、dmapgl、jsapi‑gl 或相关地图开发需求时自动触发。
- 先确认当前用户(比如
www)下 nvm 安装的真实路径:su - www -c "nvm which 18.19.1",输出类似/home/www/.nvm/versions/node/v18.19.1/bin/node - 用这个完整路径启动:
su - www -c "/home/www/.nvm/versions/node/v18.19.1/bin/node /home/www/.nvm/versions/node/v18.19.1/bin/pm2 start app.js" - 如果要用全局
pm2命令,得在 nvm 激活后重装:su - www -c "nvm use 18.19.1 && npm install -g pm2",然后检查which pm2是否指向同一目录
npm install 卡在 node-gyp 或 registry 超时
Node 版本对了,npm install 还是失败,常见于两件事没做:
- 没换国内源:
/www/server/nodejs/18.19.1/bin/npm config set registry https://registry.npmmirror.com - 权限错:别用
root执行,必须切到网站运行用户(如www):sudo -u www /www/server/nodejs/18.19.1/bin/npm install - 别点宝塔文件管理器里的「一键安装依赖」——它调的是系统默认
npm,跟你选的 Node 版本完全无关
多个 Node 项目共存,一个升级崩掉全部
宝塔「软件商店」里装多个 Node.js 插件,看似能切换,实则所有插件共享同一个 /www/server/nodejs/node 软链。你切到 v18,v16 的项目就立刻挂掉;切回 v16,v18 的 ESM 语法又报错。这不是配置问题,是架构限制。
生产环境唯一稳妥方案:
- 彻底卸载宝塔 Node.js 插件,改用 nvm 按用户安装(
su - www后装) - 每个项目用自己指定的 Node 路径启动,互不干扰
- 所有 PM2 启动命令必须带
--interpreter,且路径写死,不依赖任何环境变量
最容易被忽略的一点:PM2 进程一旦启动,就不会自动响应外部 Node 版本切换。哪怕你改了软链、重装了插件、甚至重启服务器,只要没显式重启进程并指定新解释器,它就永远跑在旧版本上。










