title: NODE版本切换及仓库地址管理
categories:
- 前端
tags: - node
- 工具
copyright: ture
ad: true
date: 2021-11-01 09:09:04
[TOC]
版本管理
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,nvm use 12
,只会默认切换到最高版本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://upload-images.jianshu.io/upload_images/560978-70fe572b0e8b9eeb.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
```
nrm add <name> <url> 添加某源地址
```
之后我们使用npm install等命令安装包时其实访问的是我们设定的源地址。
版本自动切换
我们解决了node多版本切换问题,但是还有一个麻烦点在于我们不可能只开发或维护一个项目,而且多个项目并不是在每个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
后记
还有好多使用细节以及鉴于目前自己水平的局限性,文章不能做到万无一失和紧跟新技术发展,如有错误请大家指责并回复我,一起成长。
之后还准备写一篇npm相关的文章,和本篇文章结合起来。
欢迎大家访问我的官网
DLLCNX