最近部署服务遇到公共账号中存在多个nodejs版本的冲突报错问题,导致服务无法启动,简单做一下总结。
我使用的是node10,地址:wget https://nodejs.org/dist/v10.16.0/node-v10.16.0-linux-x64.tar.gz
解压:tar -xzvf node-v10.16.0-linux-x64.tar.gz
有其他版本的需求,可上node官网查看:https://nodejs.org/zh-cn/download/
node环境变量
1.临时环境变量
- export PATH=/home/node-v10.16.0-linux-x64/bin:$PATH (这里只是用home目录做示例)
2.全局环境变量
- 在home目录中,找到.bashrc,将临时环境变量加入该文件中,再source
3.全局环境变量中指定某个版本的node
- 如果某个账号下有多个node,可以使用alias实现命令别名
- alias node10='export PATH=/home/node-v10.16.0-linux-x64/bin:$PATH'
- 部署时仅需输入node10,即可指定node版本
- 其他版本node也可使用alias指定别名,例如:
4.步骤1与步骤2任选其一即可
- 如果全局环境变量中存在别的版本node,并且有 online服务,那么使用高版本node的pm2启动时则会报错。因为全局变量优先级大于临时变量,pm2会优先去找全局变量中的node,因此建议执行步骤2与3
PM2
- 如果是用pm2启动服务,注意同一机器下公共账号中可能会有多个node版本
- 先使用pm2 status查看该机器当前启动的node服务,如果可以关掉同事的服务再好不过,但一般是不能关的。
- 因此就需要在项目运行时,为pm2加上该项目依赖版本的node的绝对路径
- pm2 start app.js --interpreter=/home/node-v10.16.0-linux-x64/bin/node --name demo(demo为项目名称)