版本治理

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.jsnvm 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 --helpShow this message
nvm --versionPrint 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>
--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 downloads
nvm uninstall <version>Uninstall a version
nvm 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 Node
nvm lsList installed versions
nvm ls <version>List versions matching a given <version>
nvm ls-remoteList remote versions available for install
--ltsWhen listing, only show LTS (long-term support) versions
nvm 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 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
--ltsWhen listing, only select from LTS (long-term support) versions
--lts=<LTS name>When listing, only select from versions for a specific LTS line
nvm deactivateUndo 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-npmAttempt 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 unloadUnload nvm from shell
nvm which [current / <version>]Display path to installed node version. Uses .nvmrc if available
nvm cache dirDisplay path to the cache directory for nvm
nvm cache clearEmpty 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-hookload-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-nvmrcload-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-navn setup

借助nvm

本地通过nvm先装置一个10.x.x的版本。自己为10.15.3

nvm exec 10.15.3 npm install -g avn avn-nvm avn-nnvm exec 10.15.3 avn setup

应用

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

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

插件解释

avn 反对以下版本管理器:

nvm 通过 avn-nvmn 通过 avn-nnodebrew 通过 avn-nodebrew