版本治理
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 上的最新可用版本
应用技巧
-
版本简写
xxx 代表须要切换的版本号,实际操作中发现能够简写,比方 v10.5.0 能够简写为 v10,甚至写为 10. 如果本地同时存在 12.22.5 和 12.19.0,切换 10,会默认切换到最高版本 12.22.5。 -
全局包
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 包。
装置应用
-
首先装置 n 模块:
npm install -g n
-
第二步:降级 node.js 到最新稳定版
n stable
n 前面也能够 + 版本号比方:
n v8.9.1
或
n v9.2.0
为什么不举荐应用更简略的 n 模块
linux 和 mac 用户疏忽
- 装置报错,强制装置也不行
-
为什么呢?
n 不兼容 Windows!,n 不兼容 Windows!,n 不兼容 Windows!!!
仓库源治理
nrm 模块
咱们解决了多个版本切换的问题,然而因为一些起因,咱们还常常须要切换仓库源地址,比方 npm 官网源地址和公有 npm 仓库地址,淘宝源等等。每次应用:
npm config set registry URL
如同有点麻烦。nrm 模块帮你解决问题:
-
装置
npm install -g nrm
-
应用
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