NVM 安装,管理多版本的 nodejs/cdnvm/yarn/global

利用nvm管理nodejs版本,实际项目中可能涉及不同的nodejs需要管理,对应也有 nvm 来管理
更新于: 2024-03-11 15:39:47

安装与升级

这个是官网安装方法,更快的安装方法可以看下面,官网: https://github.com/nvm-sh/nvm

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.5/install.sh | bash

nvm cheatsheet

命令说明
应用 .nvmrc 版本
nvm use
设定全局版本(设置并生效)
# 全局设置
nvm alias default 16
# 马上生效
nvm use 16
设置当前版本
# 设置当前
nvm use 18
安装 node18
# 安装,会自动查找当前稳定的版本
nvm install 18
公司常用版本
nvm install 8 12 14 16

国内安装(gitee方案)

  • 此方案适用于 macos/ubuntu/centos 系统
  • 另外,这个安装脚本中需要 sudo 权限,否则无法成功(可能自己改一下脚本执行就行了)
  • windows 系统未测试,不明确

地址: https://gitee.com/RubyKids/nvm-cn 

第一次安装完,并不会马上生效,需要 exit,才能正常 work.

# install
# https://gitee.com/mirrors/nvm
# https://gitee.com/mirrors/nvm/raw/master/install.sh
curl -o- https://gitee.com/mirrors/nvm/raw/master/install.sh | bash

# 马上生效
source ~/.nvm/nvm.sh

git安装nvm(推荐)

# 0. 找一个自己认为合适的目录
mkdir -p ~/github/software
cd ~/github/software

# 1. clone 项目
git clone https://github.com/nvm-sh/nvm.git

# 2. 准备目录
mkdir ~/.nvm

# 3. 调安装脚本,这里可能要挂脚本
cd nvm
./install.sh

添加如下命令到 .bashrc 中

自己的 @jswork/ushell-module-nodejs 中已经完成了这个功能

# nvm
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"  # This loads nvm bash_completion

常用 nvm 命令

# 当前 nvm 版本
nvm --version
# 列出可以安装的nodejs版本
nvm ls-remote
# 安装具体的版本(安装完之后,这个会是自动设置为当前版本)
nvm install v14.18.2
# 切换node版本
nvm use 14

我电脑中安装的版本

# 我想安装14的,先查询可安装的
nvm ls-remote 14
# 得到 v14.19.0
nvm install v14.19.0
# 设置成默认(如何不设置,就会报这个:node: command not found, 然后,每次都得设置)
nvm alias default 14.19.0
# 安装完成测试一下
node -v && npm -v
$ node -v && npm -v
v14.19.0
6.14.16

brew 安装

不推荐,因为会出现 “nvm: command not found” – 可以添加 @jswork/ushell-module-nodejs 里的逻辑到 .bashrc 里去

因为不会创建 .nvm 目录,导致  . "$NVM_DIR/nvm.sh" 这行代码执行失败

brew install nvm

.npmrc 的设置可能与 nvm 相冲突

prefix = $HOME/.npm-global 这一行去掉了

Your user’s .npmrc file (${HOME}/.npmrc)
has a `globalconfig` and/or a `prefix` setting, which are incompatible with nvm.
Run `nvm use --delete-prefix v14.19.0` to unset it.

利用brew将node@14设置为默认版本

brew link --overwrite --force node@14

Centos下安装 nvm

# 1. 安装 nvm
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh | bash
# 2. 查看可安装的版本
nvm ls-remote
# 3. 安装指定版本的 nodejs,我的(可能要先退出bash,再登录即可生效)
nvm install 14
# 4. check
node -v && npm -v
centos下安装 nvm,并安装 nodejs

新安装的版本

nvm install 16
node -v && npm -v
nvm alias default 16.15.1

卸载

# 清理
rm -rf ~/.nvm
# 删除 .bash 相关 NVM 的配置

ubuntu 下安装 nvm

# 网络好的情况下<可以访问 github>
curl https://raw.githubusercontent.com/creationix/nvm/master/install.sh | bash
# 记得用这个
@jswork/ushell-modules-nodejs

其它安装方案<gitee 快> 

针对目录自动切换

当前工具已经添加到  ushell-module-nodjes/nvm 模块中去了,当下是针对bash的版本。

参考: https://github.com/nvm-sh/nvm#bash

cdnvm() {
    command cd "$@" || return $?
    nvm_path=$(nvm_find_up .nvmrc | tr -d '\n')

    # If there are no .nvmrc file, use the default nvm version
    if [[ ! $nvm_path = *[^[:space:]]* ]]; then

        declare default_version;
        default_version=$(nvm version default);

        # If there is no default version, set it to `node`
        # This will use the latest version on your machine
        if [[ $default_version == "N/A" ]]; then
            nvm alias default node;
            default_version=$(nvm version default);
        fi

        # If the current version is not the default version, set it to use the default version
        if [[ $(nvm current) != "$default_version" ]]; then
            nvm use default;
        fi

    elif [[ -s $nvm_path/.nvmrc && -r $nvm_path/.nvmrc ]]; then
        declare nvm_version
        nvm_version=$(<"$nvm_path"/.nvmrc)

        declare locally_resolved_nvm_version
        # `nvm ls` will check all locally-available versions
        # If there are multiple matching versions, take the latest one
        # Remove the `->` and `*` characters and spaces
        # `locally_resolved_nvm_version` will be `N/A` if no local versions are found
        locally_resolved_nvm_version=$(nvm ls --no-colors "$nvm_version" | tail -1 | tr -d '\->*' | tr -d '[:space:]')

        # If it is not already installed, install it
        # `nvm install` will implicitly use the newly-installed version
        if [[ "$locally_resolved_nvm_version" == "N/A" ]]; then
            nvm install "$nvm_version";
        elif [[ $(nvm current) != "$locally_resolved_nvm_version" ]]; then
            nvm use "$nvm_version";
        fi
    fi
}

alias cd='cdnvm'
cdnvm "$PWD" || exit

整理nodejs环境

查看当前系统的状态

$ ls -alh `which yarn`
lrwxr-xr-x 1 aric staff 36 Jul  8 20:52 /Users/aric/.nvm/versions/node/v16.20.0/bin/yarn -> ../lib/node_modules/yarn/bin/yarn.js
$ npm ls -g --depth=0 | grep yarn
$ npm uninstall -g yarn
$ 在新 terminal: yarn --version

# 重新安装(安装完,新开terminal才可以看到效果)
brew install yarn
# 新开terminal才可以看到效果
yarn --version

现在的 yarn,使用 brew 安装在另一个与 nvm 无关的目录里

$ l `which yarn`
lrwxr-xr-x 1 aric admin 31 Oct 14 08:25 /usr/local/bin/yarn -> ../Cellar/yarn/1.22.19/bin/yarn

参考