我该如何在 bash 脚本中调用 "nvm use",并在脚本执行后保留所选的 Node 版本?

15 浏览
0 Comments

我该如何在 bash 脚本中调用 "nvm use",并在脚本执行后保留所选的 Node 版本?

对于一个需要从 Node.js 12 更新至 14 的构建过程,我想要一个 bash 脚本来检测是否安装了 nvm,如果是,则运行 nvm use v14(或者如果必要的话是 nvm install v14),然后我希望在 bash 脚本终止后 nvm 选择的 node 版本坚持在 14,而不仅仅是持续脚本所需的时间。

我可以使用这个脚本切换到 v14,但是在脚本终止后,shell 环境仍然停留在 v12:

#!/bin/bash
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"
source ~/.bashrc
nvm --version
echo $NVM_BIN
node --version
nvm use v14
echo $NVM_BIN
node --version

在 bash 脚本中执行 nvm 命令是一个痛点,因为 nvm 不是一个真正的命令,而是一个 shell 函数,脚本必须使用前三行来为脚本设置 nvm

输出为:

0.33.11
/home/pi/.nvm/versions/node/v12.21.0/bin
v12.21.0
Now using node v14.16.0 (npm v6.14.11)
/home/pi/.nvm/versions/node/v14.16.0/bin
v14.16.0

但是,当脚本结束时:

\"enter

我认为诀窍可能是确保环境变量 NVM_BIN 在脚本退出时持续存在于 v14 路径,但是我不知道该如何做到。事实上,我认为通常情况下,允许脚本执行的 shell 更改父 shell 中的环境变量是不被允许的。

然而,nvm 命令本身就是一个 shell 脚本,无论它做了什么,在执行完成后都是持续的。我应该也有办法让这个发生。

admin 更改状态以发布 2023年5月20日
0
0 Comments

运行脚本以后,你可以通过以下方式获取选定的节点版本:

. change-node-version.sh

script

node --version
nvm use 14.18.0
node --version

output

然后:

node --version
➜  v14.18.0

0
0 Comments

我认为如果你使用nvm设置默认别名,

nvm alias default 14.0.0

该节点版本将在任何新终端实例中保持。

0