shell脚本中使用nvm切换node版本的问题?

背景:项目安装时需要切换到node 10.x 安装依赖,我想写一个脚本自动切换到node10.x去安装
脚本执行后node确实切换到10.x了,但是yarn执行后其实使用的是node切换之前的node版本(14)

widnows上面是好的!!mac下面用zsh跑就出现了错误
widnows上面是好的!!mac下面用zsh跑就出现了错误
widnows上面是好的!!mac下面用zsh跑就出现了错误

下面是mac下面的日志:
img_v2_b2620957-c255-4a28-bc70-9173dac3b66g.png
img_v2_ee8c4ecc-0d63-49f9-a40c-f983d07fd54g.png

问题:为什么在脚本里面使用 nvm use 10.x 然后执行yarn。
yarn安装依赖的时候用的却不是node 10.x? 怎么解决这个问题?

package.json

"scripts": {
    "installProject": "bash ./scripts/install.sh"
  },

install.sh
检查node版本是否为10.24.1, 如果不是安装nvm并切换node版本到10.24.1

#!/bin/bash

# Exit on error
set -e

script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)"

# 检查当前 Node.js 版本是否为 10.24.1
current_version=$(node -v)
if [[ $current_version == v10.24.1 ]]; then
    echo "当前node版本为 10.24.1,无需切换版本。 "
    echo "开始安装项目依赖---------"
    yarn
    echo "安装完成---------"
    exit 0
fi

# 加载 nvm
if [[ -s "$HOME/.nvm/nvm.sh" ]]; then
  source "$HOME/.nvm/nvm.sh"
  echo "成功加载 nvm 配置文件"
fi

# 检查 nvm 是否已安装
if command -v nvm &> /dev/null; then
    echo "nvm 已安装"
else
    echo "nvm 未找到,正在安装..."

    # https://gitee.com/RubyKids/nvm-cn
    bash ${script_dir}/nvm/install.sh
    echo "nvm 安装完成"
fi

refresh_shell() {
    source "$HOME/.zshrc"
    source "$HOME/.bashrc"
}

refresh_shell

# 检查 Node.js 10.24.1 是否已安装
if nvm ls | grep -q "v10.24.1"; then
    echo "Node.js 10.24.1 已安装"
else
    echo "安装 Node.js 10.24.1..."
    nvm install 10.24.1
fi

# 切换到 Node.js 10.24.1
nvm use 10.24.1

refresh_shell

# 检查 Node.js 版本
node_version=$(node -v)
if [[ $node_version != v10.24.1 ]]; then
    echo "Node版本切换10.24.1失败,当前node版本${node_version},请手动安装或切换到正确的版本。"
    exit 1
fi

echo "开始安装项目依赖---------"

yarn

echo "安装完成---------"

下面是评论给的答案的尝试:

img_v2_cb914c90-17aa-45b2-af10-08a6615f1d8g.png

img_v2_4c5979e7-3e55-4528-84ae-3c96b7ba2ceg.png

阅读 4.1k
1 个回答
NODE_PATH=$(nvm which 10.x)
$NODE_PATH/yarn

另一种

`source ~/.nvm/nvm.sh
nvm use 10.x
yarn`

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题