PublicID在存在多个NodeJS版本的Linux部署

313 阅读1分钟

    最近部署服务遇到公共账号中存在多个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为项目名称)