NODE版本切换及仓库地址管理

DLLCN -
NODE版本切换及仓库地址管理
版本管理

node版本管理常见的有两种nvm和n。

NVM

nvm并非包管理器,它是用于管理多个node版本的工具

在实际的开发中,可能会出现多个项目分别使用的是不同的node版本,在这种场景下,管理不同的node版本就显得尤为重要

nvm就是用于切换版本的一个工具.

使用nvm

nvm提供了CLI工具,用于管理node版本

在终端中输入nvm,以查看各种可用命令

查看本地node版本

nvm ls  // 本地版本

nvm ls-remote   // 线上可下载版本

title

title

下载版本

nvm install xxx

例如 nvm install 8.0.0    下载指定版本8.0.0

title

切换版本

nvm use xxx


例如 nvm use 8.0   使用最新的8.0.x版本

title

删除版本

nvm uninstall <version>     卸载一个版本

其他命令

nvm run 6.10.3 app.js  使用6.10.3运行app.js

nvm exec 4.8.3 node app.js         使用指向4.8.3的路径运行`node app.js`   

nvm alias default 8.1.0  在shell上设置默认版本,不设置则默认是已下载的最新版本


nvm alias default node  始终默认为shell上的最新可用版本      
使用技巧

版本简写
xxx代表需要切换的版本号,实际操作中发现可以简写,比如v10.5.0可以简写为v10,甚至写为10.如果本地同时存在12.22.5和12.19.0,切换10,会默认切换到最高版本12.22.5。

title

全局包
nvm有一个弊端,当你安装一些全局的包(或者本地),假设这个包是兼容的并在那个node版本上经过测试.如果你改变了node的版本,这些全局命令无法转移到新版本上.所以要么重新安装他们。

但是nvm下载版本时提供了--reinstall-packages-from参数,来解决重新下载的问题.

使用全局安装包的最简单的方法之就是:

例如:
nvm install 12.22.5 --reinstall-packages-from=10.0.0

下载12.22.5版本时将10.0.0的全局模块重新下载
原生命令文档命令描述nvm --helpShow this messagenvm --versionPrint out the installed version of nvmnvm install [-s] <version>Download and install a <version>, [-s] from source. Uses .nvmrc if available--reinstall-packages-from=<version>When installing, reinstall packages installed in <node/iojs/node version number>--ltsWhen installing, only select from LTS (long-term support) versions--lts=<LTS name>When installing, only select from versions for a specific LTS line--skip-default-packagesWhen installing, skip the default-packages file if it exists--latest-npmAfter installing, attempt to upgrade to the latest working npm on the given node version--no-progressDisable the progress bar on any downloadsnvm uninstall <version>Uninstall a versionnvm uninstall --ltsUninstall using automatic LTS (long-term support) alias lts/*, if available.nvm uninstall --lts=<LTS name>Uninstall using automatic alias for provided LTS line, if available.nvm use [--silent] <version>Modify PATH to use <version>. Uses .nvmrc if available--ltsUses automatic LTS (long-term support) alias lts/*, if available.--lts=<LTS name>Uses automatic alias for provided LTS line, if available.nvm exec [--silent] <version> [<command>]Run <command> on <version>. Uses .nvmrc if available--ltsUses automatic LTS (long-term support) alias lts/*, if available.--lts=<LTS name>Uses automatic alias for provided LTS line, if available.nvm run [--silent] <version> [<args>]Run node on <version> with <args> as arguments. Uses .nvmrc if available--ltsUses automatic LTS (long-term support) alias lts/*, if available.--lts=<LTS name>Uses automatic alias for provided LTS line, if available.nvm currentDisplay currently activated version of Nodenvm lsList installed versionsnvm ls <version>List versions matching a given <version>nvm ls-remoteList remote versions available for install--ltsWhen listing, only show LTS (long-term support) versionsnvm ls-remote <version>List remote versions available for install, matching a given <version>--ltsWhen listing, only show LTS (long-term support) versions--lts=<LTS name>When listing, only show versions for a specific LTS linenvm version <version>Resolve the given description to a single local versionnvm version-remote <version>Resolve the given description to a single remote version--ltsWhen listing, only select from LTS (long-term support) versions--lts=<LTS name>When listing, only select from versions for a specific LTS linenvm deactivateUndo effects of nvm on current shellnvm alias [<pattern>]Show all aliases beginning with <pattern>nvm alias <name> <version>Set an alias named <name> pointing to <version>nvm unalias <name>Deletes the alias named <name>nvm install-latest-npmAttempt to upgrade to the latest working npm on the current node versionnvm reinstall-packages <version>Reinstall global npm packages contained in <version> to current versionnvm unloadUnload nvm from shellnvm which [current / <version>]Display path to installed node version. Uses .nvmrc if availablenvm cache dirDisplay path to the cache directory for nvmnvm cache clearEmpty cache directory for nvmn模块

还有一个node的版本管理工具很好用,n模块,他是一个npm包。

安装使用

首先安装n模块:

 npm install -g n

第二步:升级node.js到最新稳定版

 n stable

n后面也可以+版本号比如:

n v8.9.1
或
n v9.2.0
为什么不推荐使用更简单的n模块

linux和mac用户忽略

安装报错,强制安装也不行
title

为什么呢?

n不兼容Windows!,n不兼容Windows!,n不兼容Windows!!!

仓库源管理nrm模块

我们解决了多个版本切换的问题,但是因为一些原因,我们还经常需要切换仓库源地址,比如npm官方源地址和私有npm仓库地址,淘宝源等等。每次使用:

npm config set registry URL

好像有点麻烦。nrm模块帮你解决问题:

安装

npm install -g nrm

使用

nrm ls  // 查看可用地址

title


```
nrm use xxx  // 切换到某源,例如nrm use cnpm切换到cnpm源地址
```
![title](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/6c5e583da1e04d8ab5741623beb5248c~tplv-k3u1fbpfcp-zoom-1.image)


```
nrm add <name> <url>  添加某源地址
```
![title](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/136de119badf4b589ff3977f443b571e~tplv-k3u1fbpfcp-zoom-1.image)

之后我们使用npm install等命令安装包时其实访问的是我们设定的源地址。

版本自动切换

我们解决了node多版本切换问题,但是还有一个麻烦点在于我们不可能只开发或维护一个版本,而且多个版本并不是在每个版本下都能运行(不然我们也没必要用版本切换工具了)。例如:项目A必须在10版本才能正常运行,B项目则在12上运行,我们同时维护开发A和B,每次都得手动切换项目,哪次忘切换了旧的报错,不智能。

版本自动切换我目前使用的有两种。nvm+zsh(bash)或者avn模块。

nvm + zsh(或bash)

此方法只支持mac os和linux系统,windos不行

添加脚本

使用zsh

如果您使用zsh,在您的~/.zshrc文件中添加如下脚本:

# place this after nvm initialization!
autoload -U add-zsh-hook
load-nvmrc() {
  local node_version="$(nvm version)"
  local nvmrc_path="$(nvm_find_nvmrc)"

  if [ -n "$nvmrc_path" ]; then
    local nvmrc_node_version=$(nvm version "$(cat "${nvmrc_path}")")

    if [ "$nvmrc_node_version" = "N/A" ]; then
      nvm install
    elif [ "$nvmrc_node_version" != "$node_version" ]; then
      nvm use
    fi
  elif [ "$node_version" != "$(nvm version default)" ]; then
    echo "Reverting to nvm default version"
    nvm use default
  fi
}
add-zsh-hook chpwd load-nvmrc
load-nvmrc

title

保存退出。

使用bash
如果您使用bash,可以将其添加到您的~/.bashrc文件中:

enter_directory() {
  if [[ $PWD == $PREV_PWD ]]; then
    return
  fi

  PREV_PWD=$PWD
  [[ -f ".nvmrc" ]] && nvm use
}

export PROMPT_COMMAND=enter_directory
创建版本控制文件

在您的项目中创建.nvmrc文件,填入需要切换的版本:
title

接下来每次当您进入项目目录时,nvm会帮你自动切换到对应node版本,退出目录node版本又还原了,不用每次手动操作了。

title

avn模块

支持nvm和n的切换。但是他和上边修改命令不一样的点在于,上边方法只有进入对应目录才使用指定版本,退出目录还原默认版本。此方法进入对应目录,切换对应版本,但是退出目录,依旧是此版本,只有shell窗口重启才还原为默认。

但是,经过我在zsh+nvm+node(14.x.x)下测试,此模块目前有兼容性问题,就是您安装此模块的主版本必须是10.x.x,更高版本估计哪个依赖项有问题,后边有时间找找。

但是如果你采用nvm进行版本切换,可以借助exec命令解决问题。n应该也有对应指定版本下载的模块的方法。

官方安装(主版本高于10会出问题,截止到2021.10.31未修复)
npm install -g avn avn-nvm avn-n
avn setup
借助nvm

本地通过nvm先安装一个10.x.x的版本。本人为10.15.3

nvm exec 10.15.3 npm install -g avn avn-nvm avn-n
nvm exec 10.15.3 avn setup
使用

在项目目录撞见.node-version文件,填入需要的node版本。

现在,当您cd进入带有.node-version文件的目录时,avn将自动检测更改并使用您安装的版本管理器切换到该版本的node。

插件解释

avn 支持以下版本管理器:

nvm 通过 avn-nvm
n 通过 avn-n
nodebrew 通过 avn-nodebrew
特别申明:本文内容来源网络,版权归原作者所有,如有侵权请立即与我们联系(cy198701067573@163.com),我们将及时处理。

Tags 标签

node.js

扩展阅读

加个好友,技术交流

1628738909466805.jpg