版本治理
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上的最新可用版本
应用技巧
版本简写
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源地址``````nrm add <name> <url> 增加某源地址```
之后咱们应用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