You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

EC2服务器与GitHub Actions中Node.js、npm版本不一致问题咨询

本地SSH与GitHub Actions远程SSH执行Node.js/npm版本不一致问题

问题描述

我在AWS EC2上部署了服务器应用,本地终端SSH登录服务器后,查看的Node.js和npm版本为:

npm : 8.11
node : 17.9.1

但通过GitHub Actions的远程SSH执行命令时,得到的版本却不一样:

cd server
npm -v
node -v

======END======
out: 3.5.2
out: v8.10.0

我认为两者版本应该一致,但不清楚差异产生的原因,我的理解是否有误?

附上使用的GitHub Actions工作流配置:

jobs:
  build:
    runs-on: ubuntu-latest

    defaults:
      run:
        shell: bash
        working-directory: ./server

    steps:
      - name: Cache node modules
        uses: actions/cache@v2
        with:
          path: ~/.npm
          key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
          restore-keys: |
            ${{ runner.os }}-node-
      - name: Use Node.js
        uses: actions/setup-node@v1
        with:
          node-version: '14.x'
          
      - name: executing remote ssh commands using password
        uses: appleboy/ssh-action@master
        with:
          host: ${{ secrets.HOST }}
          username: 'ubuntu'
          key: ${{ secrets.SSH_KEY }}
          script : |
            cd server
            pwd
            npm -v
            node -v

原因分析

本地SSH和GitHub Actions的远程SSH环境环境变量不同,核心是PATH变量的差异,导致调用的Node.js/npm不是同一个版本:

  • 本地登录SSH时,属于交互式登录shell,会自动加载用户的shell配置文件(比如~/.bashrc、~/.profile),这些文件通常会把你手动安装的Node.js(比如通过nvm、n工具安装的版本)路径加入PATH,所以你看到的是17.9.1/8.11版本。
  • GitHub Actions的appleboy/ssh-action执行远程命令时,默认是非交互式非登录shell,不会加载用户的shell配置文件,此时PATH用的是系统默认值,调用的是EC2系统预装的旧版本Node.js/npm(也就是3.5.2/v8.10.0)。

另外注意:你在GitHub Actions中配置的setup-node@v1是给GitHub的runner环境(ubuntu-latest)设置Node.js版本,和EC2服务器上的环境完全无关,这一步对远程EC2的版本没有任何影响。

解决办法

方法1:加载用户shell配置文件

修改GitHub Actions的ssh脚本部分,先加载用户的配置文件(以bash为例):

script : |
  source ~/.bashrc
  cd server
  pwd
  npm -v
  node -v

如果你的EC2用户用的是zsh,就改成source ~/.zshrc。

方法2:直接指定Node.js/npm的完整路径

先在本地SSH登录EC2,执行以下命令获取完整路径:

which node
which npm

比如输出可能是/home/ubuntu/.nvm/versions/node/v17.9.1/bin/node和/home/ubuntu/.nvm/versions/node/v17.9.1/bin/npm,然后在脚本中使用完整路径:

script : |
  cd server
  /home/ubuntu/.nvm/versions/node/v17.9.1/bin/npm -v
  /home/ubuntu/.nvm/versions/node/v17.9.1/bin/node -v

方法3:显式设置PATH环境变量

在脚本中直接把你安装的Node.js的bin目录加入PATH:

script : |
  export PATH="/home/ubuntu/.nvm/versions/node/v17.9.1/bin:$PATH"
  cd server
  npm -v
  node -v

路径需要根据你实际安装的Node.js位置调整。

内容的提问来源于stack exchange,提问作者robin14dev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 12:01:44