乐趣区

关于node.js:NODE版本切换及仓库地址管理

版本治理

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

NVM

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

在理论的开发中,可能会呈现多个我的项目别离应用的是不同的 node 版本,在这种场景下,治理不同的 node 版本就显得尤为重要

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

应用 nvm

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

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

查看本地 node 版本

nvm ls  // 本地版本

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

下载版本

nvm install xxx

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

切换版本

nvm use xxx


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

删除版本

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 上的最新可用版本      

应用技巧

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

  2. 全局包
    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 –help Show this message
nvm –version Print out the installed version of nvm
nvm 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>
–lts When 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-packages When installing, skip the default-packages file if it exists
–latest-npm After installing, attempt to upgrade to the latest working npm on the given node version
–no-progress Disable the progress bar on any downloads
nvm uninstall <version> Uninstall a version
nvm uninstall –lts Uninstall 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
–lts Uses 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
–lts Uses 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
–lts Uses automatic LTS (long-term support) alias lts/*, if available.
–lts=<LTS name> Uses automatic alias for provided LTS line, if available.
nvm current Display currently activated version of Node
nvm ls List installed versions
nvm ls <version> List versions matching a given <version>
nvm ls-remote List remote versions available for install
–lts When listing, only show LTS (long-term support) versions
nvm ls-remote <version> List remote versions available for install, matching a given <version>
–lts When listing, only show LTS (long-term support) versions
–lts=<LTS name> When listing, only show versions for a specific LTS line
nvm version <version> Resolve the given description to a single local version
nvm version-remote <version> Resolve the given description to a single remote version
–lts When listing, only select from LTS (long-term support) versions
–lts=<LTS name> When listing, only select from versions for a specific LTS line
nvm deactivate Undo effects of nvm on current shell
nvm 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-npm Attempt to upgrade to the latest working npm on the current node version
nvm reinstall-packages <version> Reinstall global npm packages contained in <version> to current version
nvm unload Unload nvm from shell
nvm which [current / <version>] Display path to installed node version. Uses .nvmrc if available
nvm cache dir Display path to the cache directory for nvm
nvm cache clear Empty cache directory for nvm

n 模块

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

装置应用

  1. 首先装置 n 模块:

     npm install -g n
  2. 第二步:降级 node.js 到最新稳定版

     n stable

n 前面也能够 + 版本号比方:

n v8.9.1
或
n v9.2.0

为什么不举荐应用更简略的 n 模块

linux 和 mac 用户疏忽

  1. 装置报错,强制装置也不行
  2. 为什么呢?

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

仓库源治理

nrm 模块

咱们解决了多个版本切换的问题,然而因为一些起因,咱们还常常须要切换仓库源地址,比方 npm 官网源地址和公有 npm 仓库地址,淘宝源等等。每次应用:

npm config set registry URL

如同有点麻烦。nrm 模块帮你解决问题:

  1. 装置

    npm install -g nrm
  2. 应用

    nrm ls  // 查看可用地址


```
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

保留退出。

应用 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 文件,填入须要切换的版本:

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

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
退出移动版