Skip to content

告别版本混乱:nvm 和 nrm 的配置与最佳实践

About 975 wordsAbout 3 min

vuenvmnode

2024-07-05

我们为什么会用到多版本的Node, 因为在老项目中,太高版本的node会出现许多问题, 这个时候方便的切换node版本就显得尤为重要;其次就是在排查问题中可能会切换版本来定位问题。

一、nvm:多node版本管理

1.1、安装nvm

这里使用的是mac来演示, 直接使用brew install nvm来安装就可以了。安装之后终端会有如下提示:You should create NVM's working directory if it doesn't exist,使用下面命令创建一下:mkdir ~/.nvm

我们需要创建出来这个.nvm的目录,然后还会提示添加环境变量:Add the following to your shell profile e.g. ~/.profile or ~/.zshrc,使用下面命令配置一下:

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

我们把上面的export及其下面的内容添加到 ~/.profile 或者~/.zshrc里面,然后source一下就可以用了:source ~/.zshrc


不使用上面brew的安装方式,使用源码仓库中安装方式。

Installing-and Updating

安装或者更新nvm,可以通过下面的脚本来实现

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

这个脚本通过克隆nvm代码仓库代码到~/.nvm,然后尝试在环境变量文件(~/.bashrc, ~/.zshrc等等)后面添加下面的环境变量,如果没有添加环境变量成功的话, 也可以手动执行下面语句。

export NVM_DIR="$([ -z "${XDG_CONFIG_HOME-}" ] && printf %s "${HOME}/.nvm" || printf %s "${XDG_CONFIG_HOME}/nvm")"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm

这样子的话, 我们只需要重新启动终端,就能够使用nvm了。

1.2、nvm使用技巧

1.2.1 nvm list

(base) jet5devil-index (dev0) ✗ nvm list
->     v18.20.3
         system
default -> 18 (-> v18.20.3)
iojs -> N/A (default)
unstable -> N/A (default)
node -> stable (-> v18.20.3) (default)
stable -> 18.20 (-> v18.20.3) (default)
lts/* -> lts/iron (-> N/A)
lts/hydrogen -> v18.20.3
lts/iron -> v20.15.0 (-> N/A)

1.2.2、nvm install <node-version>

例如:nvm install 18下载node==18的版本。

1.3、nvm问题总结

1.3.1、Visual Code中的终端启动项目问题

出现一个问题,使用自带的终端启动没有问题,node -v 版本v20.19.5, 但是在vs里面node -v版本v20.11.0, 启动就会出现[plugin:vite:vue] crypto.hash is not a function的问题。

使用不同的node:

// iterm
(base) ➜ jet5devil-index (dev1) ✗ which node
/Users/dengc4r/.nvm/versions/node/v20.19.5/bin/node

// vs
(base) ➜ jet5devil-index (dev1) ✗ which node  
/usr/local/bin/node

但是在vs里面使用nvm会错误:zsh:command not found:nvm

二、nrm:多镜像源管理

对于后端开发来说,能够多掌握一点前端知识总算是好的,之前是一直在使用nrm,只是使用他的nrm use 的工功能,这里强势学习一波。

nrm(npm registry manager)是npm的镜像管理工具。

2.1、安装nrm

npm install -g nrm

不仅是npm的源可以用nrm来切换,pnpm的源是跟着npm的,所以切换npm的源,pnpm的源地址也随着npm源的变化而变化。

2.2、nrm使用技巧

// 查看当前源
nrm ls // 查看所有的
nrm current // 查看当前使用的源

// 切换源
nrm use taobao

// 增加源
nrm add <registry> <url> // registry为源名称, url为源的路径
nrm add yx http://xx.xxx.xxx.xx:52528/repository/ys-group/

// 删除源
nrm del <registry>  
nrm del yx

2.3、nrm问题总结

2.3.1、使用nrm use无法切换源

(base) ➜ jet5devil-index (dev1) ✗ nrm use npm   
   Registry has been set to: https://registry.npmmirror.com/
   
(base) ➜ jet5devil-index (dev1) ✗ nrm use cnpm                        
   Registry has been set to: https://registry.npmmirror.com/

通过上面的输出就能很好的看出来问题,我先切换到npm源,输出的是npmmirror,我在切换到cnp也是npmmirror,所以我觉得多半是nrm问题了。

使用下面命令重新安装了一下nrm,就可以切换了。npm install -g nrm --force

或者是强行切换:nrm use taobao --force

或者是手动切换registry:npm config set registry https://registry.npmmirror.com/

Changelog

10/10/25, 3:04 PM
View All Changelog
  • 1ee1e-feat(wiki): algo -on

求求了,快滚去学习!!!

求求了求求了,快去学习吧!

【题单】贪心算法

不知道方向的时候,可以多看看书,书会给你指明下一步该干什么,加油!