nvm中node的版本切换

519 阅读2分钟

目前多个版本的node切换都采用nvm,当我们切换node版本的时候

  • 为什么全局安装的npm包命令访问不到了?
  • 我们自定义了源之后,切换node版本会失效吗?
  • 为什么我yarn config set registry https://r.cnpmjs.org/没有生效?

为什么全局安装的npm包命令访问不到了

从下图可以看出npm的全局安装目录跟node版本相关,所以切换node版本会导致npm安装的全局包命令丢失,而yarn的全局安装与node版本无关,所以不会导致命令丢失

我们自定义了源之后,切换node版本会失效吗?

当用户修改npm源npm config set registry https://registry.npm.taobao.org/的时候,/Users/qiao/.npmrc如果没有文件,会为用户生成,如果有修改里面的配置,而nrm也是直接改这个的配置,所以与node版本无关

yarn config set registry https://r.cnpmjs.org/ 无效

当npm有自定义源的时候,优先采用npm配置的源 image.png

关于registry的其他小知识

  • 项目中,当我们项目根目录下配置.npmrc,内容如下,我们在项目中npm install实际用的就是这个源下载, 如果有lock文件,以lockresolveurl地址下载,而不是.npmrc配置的源了。
registry=https://registry.npmmirror.com
  • 而在项目中运行npm install serve -g是从全局配置的源下载的,你可以跳出项目目录运行npm config get registry从而知晓全局配置的源

cache(缓存位置)

按如下图所示。与node版本切换也没有关系

cache与registry有关系吗

如下图是有关系的 image.png

总结

  • npm的全局安装目录跟node版本相关,切换版本则得重新安装。yarn的全局安装与node版本无关,所以不会导致命令丢失
  • yarn config set registry https://r.cnpmjs.org/的优先级小于npm的自定义registry,如果已经自定义了npm源,yarn的registry就会失效
  • 项目根目录下的.npmrc配置与全局安装命令npm install serve -g无关