当前位置: 首页 > 知识库问答 >
问题:

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

万乐逸
2023-05-26

背景:项目安装时需要切换到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

共有1个答案

禄和宜
2023-05-26
NODE_PATH=$(nvm which 10.x)
$NODE_PATH/yarn

另一种

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

 类似资料:
  • 场景:本地环境需要用14.x,但是yarn install 时需要 10.x 使用nvm在preinstall时node版本 package.json preinstall.sh 执行 yarn install 提示node版本为14.x,编译必须(10.x) 原因:在 preinstall 脚本中使用 nvm 切换了 Node.js 版本,并且在 install 脚本中希望使用已切换的版本,可能

  • nvm use 14.17.0 运行完之后doskey却报错 而且全是乱码。 之前对doskey进行过的操作就是在注册表里写了个AutoRun里面自动运行“doskey /macros=...”用来实现自定义命令,出现了这个错误之后我就直接把注册表里之前加的AutoRun给删了,但是错误仍旧存在。 求大佬指点!!!

  • 问题内容: 我想检测python是否安装在Linux系统上,如果安装了python版本。 我该怎么做?是否有比解析输出更优雅的东西? 问题答案: 您可以按照以下方式使用: 元组记录在这里。您可以展开上面的Python代码,以适合您需求的方式格式化版本号,或者对它执行检查。 您需要检入脚本来处理未找到脚本的情况。 PS:我使用的语法有点奇怪,以确保与Python 2.x和3.x兼容。

  • Windows7,Neo4j社区版-新安装。 D:\appdata\neo4j\sports2000>pushd“D:\applic~1\neo4jc~1.1\bin\..\lib”系统找不到指定的路径。 在批处理文件的后面是: D:\appdata\neo4j\sports2000>java-classpath;“-dapp.name=“neo4j-shell”-dapp.repo=“d:\ap

  • update to revision:更新到指定版本。    

  • 问题内容: 故事:我拥有的其中一个应用程序可以在python 2.4上工作,而另一个可以在2.6上工作。我试图将python2.4链接到python,并且在ubuntu麻烦时事情开始崩溃。现在我正在下载2.4的每个依赖项,并使用python2.4 setup.py install进行安装。依赖性似乎是无限的。 问题1:我将如何告诉任何要使用版本的框架,例如pf python,如day django