justajwolf

V1

2022/07/11阅读:50主题:极简黑

nvm管理nodejs(保姆级笔记)

前言

背景

于 2009 年的某一天 js 终于挣脱了浏览器的束缚,随着这么些年事态不断升级,目前 js 基本上已达为所欲为的境地,web 应用、pc 桌面应用、各小程序等阵地也都相继被 js 拿下,这一切的一切都离不开在后面默默付出的 nodejs。

言归正传,说到 nodejs,无论是刚入手的小新,还是久经沙场的前端,亦或是终日与 nodejs 打交道的服务端,都会遇到的一个不大但又棘手的问题,就是处于 nodejs 版本快速迭代的大背景下,需要切换不同的版本 nodejs 来维护或者迭代具体产品。

为什么我们要用 nvm?

以 windows 系统为例,安装 nodejs 时大家一般都会按照官网的安装流程进行,当需要切换 nodejs 版本时候,通常来说需要删除原有版本,重新安装指定版本。这对于喜欢方便的人来说无疑是一种慢性的折磨。当然对于同时喜欢折腾的人,这也确实不算啥问题,自己写个脚本就能解决。因为切换 nodejs 版本,无非就是保证环境变量中 node 可执行程序的位置指向的是目标 node 版本位置,基本的两个解决思路如下:

  1. 动态修改环境变量 PATH 中 node 的路径配置
  2. 保持环境变量 PATH 中 node 的路径不变,动态修改路径下的 node 版本

对于我们大多数人来说,不喜欢自己造轮子还是喜欢使用现成的工具(这种工具实现就交给社区大佬们去做吧),换句话说哪个程序员不喜欢偷懒呢。当然社区目前也有不少关于 nodejs 版本管理的工具,这里就只介绍 nvm 的安装和使用,其它的大家可以自行了解

对于 nvm 这个工具,首先小哥觉得挺好用,并且实现思路也基本如上面说的,其次它应该符合大家对这个工具的期望,反正比小哥自己写的脚本好用。

正文

这里我依次按照 linux/mac,windows 这个顺序去介绍如何安装和使用nvm,以及使用中一些注意事项。

为什么还要介绍 windows 呢,因为小哥对 windows 很青睐,对水果系统不感冒。平时用的一直是 windows 系统,不过自打 win10,有了 wsl,小哥就一直使用的是 wsl 来作为开发环境,也就是说小哥的开发环境目前也是 linux,但曾经也一度使用 windows 下的 nvm 来管理 node,虽然现在不用了,也介绍下吧,为还在使用 windows 的朋友提供更多的选择。

关于 wsl 开发环境的使用,后续我会专门整理一篇,分享给大家。

接下来,开始进入正题,介绍 nvm 的安装和使用。

linux / mac

linux/mac 下的 nvm 仓库:https://github.com/nvm-sh/nvm

这个版本 nvm,其实就是 sh 脚本,感兴趣的朋友可以,看看 install.sh 和 nvm.sh,这俩脚本文件。

1.下载安装 nvm

关于直接访问 github 内容文件:https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh,可能会超时或者访问不到的情况,可以使用jsDelivr这个免费的 CDN 地址进行转换,访问https://www.jsdelivr.com/github,如下图:

使用jsDelivr转换
使用jsDelivr转换

以 ubuntu 系统为例,使用 curl 安装 nvm,如下

root@xxx-pc:~$ curl -o- https://cdn.jsdelivr.net/gh/nvm-sh/nvm@v0.39.1/install.sh | bash
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 15037  100 15037    0     0  37128      0 --:--:-- --:--:-- --:--:-- 37312
=> nvm is already installed in /root/.nvm, trying to update using git
=> => Compressing and cleaning up git repository

=> Appending nvm source string to /root/.bashrc
=> Appending bash_completion source string to /root/.bashrc
=> Close and reopen your terminal to start using nvm or run the following to use it now:

export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"  # This loads nvm bash_completion
root@xxx-pc:~$

注:linux 下,配置在 ~/.bashrc

注:mac 下,配置在 ~/.zshrc

2.通过 nvm 安装 nodejs

2.1 查看 nvm help

root@xxx-pc:~$ nvm -h
Node Version Manager (v0.39.1)

Note: <version> refers to any version-like string nvm understands. This includes:
  - full or partial version numbers, starting with an optional "v" (0.10, v0.1.2, v1)
  - default (built-in) aliases: node, stable, unstable, iojs, system
  - custom aliases you define with `nvm alias foo`

 Any options that produce colorized output should respect the `--no-colors` option.

Usage:
  nvm --help                                  Show this message
    --no-colors                               Suppress colored output
  nvm --version                               Print out the installed version of nvm
  nvm install [<version>]                     Download and install a <version>. Uses .nvmrc if available and version is omitted.
   The following optional arguments, if provided, must appear directly after `nvm install`:
    -s                                        Skip binary download, install from source only.
    -b                                        Skip source download, install from binary only.
    --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
    --alias=<name>                            After installing, set the alias specified to the version specified. (same as: nvm alias <name> <version>)
    --default                                 After installing, set default alias to the version specified. (same as: nvm alias default <version>)
  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 [<version>]                         Modify PATH to use <version>. Uses .nvmrc if available and version is omitted.
   The following optional arguments, if provided, must appear directly after `nvm use`:
    --silent                                  Silences stdout/stderr output
    --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 [<version>] [<command>]            Run <command> on <version>. Uses .nvmrc if available and version is omitted.
   The following optional arguments, if provided, must appear directly after `nvm exec`:
    --silent                                  Silences stdout/stderr output
    --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 [<version>] [<args>]                Run `node` on <version> with <args> as arguments. Uses .nvmrc if available and version is omitted.
   The following optional arguments, if provided, must appear directly after `nvm run`:
    --silent                                  Silences stdout/stderr output
    --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 [<version>]                          List installed versions, matching a given <version> if provided
    --no-colors                               Suppress colored output
    --no-alias                                Suppress `nvm alias` output
  nvm ls-remote [<version>]                   List remote versions available for install, matching a given <version> if provided
    --lts                                     When listing, only show LTS (long-term support) versions
    --lts=<LTS name>                          When listing, only show versions for a specific LTS line
    --no-colors                               Suppress colored output
  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
    --silent                                  Silences stdout/stderr output
  nvm alias [<pattern>]                       Show all aliases beginning with <pattern>
    --no-colors                               Suppress colored output
  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 and version is omitted.
    --silent                                  Silences stdout/stderr output when a version is omitted
  nvm cache dir                               Display path to the cache directory for nvm
  nvm cache clear                             Empty cache directory for nvm
  nvm set-colors [<color codes>]              Set five text colors using format "yMeBg". Available when supported.
                                               Initial colors are:
                                                   g  b  y  r  e
                                               Color codes:
                                                 r/R = red / bold red
                                                 g/G = green / bold green
                                                 b/B = blue / bold blue
                                                 c/C = cyan / bold cyan
                                                 m/M = magenta / bold magenta
                                                 y/Y = yellow / bold yellow
                                                 k/K = black / bold black
                                                 e/W = light grey / white

Example:
  nvm install 8.0.0                     Install a specific version number
  nvm use 8.0                           Use the latest available 8.0.x release
  nvm run 6.10.3 app.js                 Run app.js using node 6.10.3
  nvm exec 4.8.3 node app.js            Run `node app.js` with the PATH pointing to node 4.8.3
  nvm alias default 8.1.0               Set default node version on a shell
  nvm alias default node                Always default to the latest available node version on a shell

  nvm install node                      Install the latest available version
  nvm use node                          Use the latest version
  nvm install --lts                     Install the latest LTS version
  nvm use --lts                         Use the latest LTS version

  nvm set-colors cgYmW                  Set text colors to cyan, green, bold yellow, magenta, and white

Note:
  to remove, delete, or uninstall nvm - just remove the `$NVM_DIR` folder (usually `~/.nvm`)

2.2 安装并使用指定版本 nodejs

安装 node 时,如果当前机器 cpu arch 从镜像源,没找到已编译好的 node,则需要本地现编译,这个时候可能需要 c++的编译环境,如果没有安装,则根据报错提示安装一下即可。

# 缺少c++编译环境啥的执行:apt update && apt install build-essential
# 安装 lts 版本
root@xxx-pc:~$ nvm install --lts
Installing latest LTS version.
Downloading and installing node v16.16.0...
Downloading https://nodejs.org/dist/v16.16.0/node-v16.16.0-linux-x64.tar.xz...
################################################################################################################################################## 100.0%
Computing checksum with sha256sum
Checksums matched!
Now using node v16.16.0 (npm v8.11.0)

# 安装 14.19.3 版本
root@xxx-pc:~$ nvm install 14.19.3
Installing latest LTS version.
Downloading and installing node v14.19.3...
Downloading https://nodejs.org/dist/v14.19.3/node-v14.19.3-linux-x64.tar.xz...
################################################################################################################################################## 100.0%
Computing checksum with sha256sum
Checksums matched!
Now using node v14.19.3 (npm v6.14.17)

root@xxx-pc:~$ nvm ls
->     v14.19.3
       v16.16.0
default -> v14.19.3
iojs -> N/A (default)
unstable -> N/A (default)
node -> stable (-> v16.16.0) (default)
stable -> 16.16 (-> v16.16.0) (default)
lts/* -> lts/gallium (-> v16.16.0)
lts/argon -> v4.9.1 (-> N/A)
lts/boron -> v6.17.1 (-> N/A)
lts/carbon -> v8.17.0 (-> N/A)
lts/dubnium -> v10.24.1 (-> N/A)
lts/erbium -> v12.22.12 (-> N/A)
lts/fermium -> v14.20.0 (-> N/A)
lts/gallium -> v16.16.0
root@xxx-pc:~$

这里需要注意一点,当我们使用nvm use时,只是在当前终端进程中生效,新打开一个终端,node 版本还是之前的版本,如果需要变更默认 node 版本,需要执行 node alias default [version],如设置 14.19.3 为默认版本,执行 node alias default 14.19.3 命令,这个时候重启种端,会发现 node 版本已经

2.3 配置 npm 镜像地址,安装常见全局包

# 配置npm使用国内镜像
root@xxx-pc:~$ npm config set registry https://registry.npmmirror.com

# 全局安装node-gyp包
root@xxx-pc:~$ npm i -g node-gyp
/root/.nvm/versions/node/v14.19.3/bin/node-gyp -> /root/.nvm/versions/node/v14.19.3/lib/node_modules/node-gyp/bin/node-gyp.js
+ node-gyp@9.0.0
updated 2 packages in 0.75s

root@xxx-pc:~$

windows

windows 下的 nvm 仓库:https://github.com/coreybutler/nvm-windows

这个版本的 nvm 是专门为 windows 下用户写的。

突然发现,作者使用 go 重构了 nvm,感觉比以前确实快了不少,实现也不复杂,有兴趣的朋友可以去看看源码。

1.下载 nvm
  • 猛戳此链接(https://github.com/coreybutler/nvm-windows/releases)找到 nvm-setup.exe 后点击它!

  • 将下载好的 nvm-setup.exe,以管理员身份打开,快速安装如下图:

    nvm快速安装界面
    nvm快速安装界面
    配置NVM_HOME,即:nvm root
    配置NVM_HOME,即:nvm root
    配置NVM_SYMLINK,即:nvm use之后nodejs路径
    配置NVM_SYMLINK,即:nvm use之后nodejs路径
    完成nvm安装
    完成nvm安装
2.配置国内镜像源,有如下两种方式

方式 1: 使用管理员身份,打开 cmd 执行如下命令配置镜像地址

# node_mirror node淘宝镜像
C:\Windows\system32> nvm node_mirror https://npmmirror.com/mirrors/node/
# npm_mirror npm淘宝镜像
C:\Windows\system32> nvm npm_mirror https://npmmirror.com/mirrors/npm/

方式 2: 打开 nvm 配置文件 setting.txt,添加镜像配置

// setting.txt
root: D:\nvm
arch: 64
proxy: none
originalpath: .
originalversion:

// 补充如下两行
node_mirror: https://npmmirror.com/mirrors/node/
npm_mirror: https://npmmirror.com/mirrors/npm/
3.通过 nvm 安装 nodejs

3.1 查看 nvm help

C:\Windows\system32> nvm -h
Running version 1.1.9.
Usage:
  nvm arch                     : Show if node is running in 32 or 64 bit mode.
  nvm current                  : Display active version.
  nvm install <version> [arch] : The version can be a specific version, "latest" for the latest current version, or "lts" for the
                                 most recent LTS version. Optionally specify whether to install the 32 or 64 bit version (defaults
                                 to system arch). Set [arch] to "all" to install 32 AND 64 bit versions.
                                 Add --insecure to the end of this command to bypass SSL validation of the remote download server.
  nvm list [available]         : List the node.js installations. Type "available" at the end to see what can be installed. Aliased as ls.
  nvm on                       : Enable node.js version management.
  nvm off                      : Disable node.js version management.
  nvm proxy [url]              : Set a proxy to use for downloads. Leave [url] blank to see the current proxy.
                                 Set [url] to "none" to remove the proxy.
  nvm node_mirror [url]        : Set the node mirror. Defaults to https://nodejs.org/dist/. Leave [url] blank to use default url.
  nvm npm_mirror [url]         : Set the npm mirror. Defaults to https://github.com/npm/cli/archive/. Leave [url] blank to default url.
  nvm uninstall <version>      : The version must be a specific version.
  nvm use [version] [arch]     : Switch to use the specified version. Optionally use "latest""lts", or "newest".
                                 "newest" is the latest installed version. Optionally specify 32/64bit architecture.
                                 nvm use <arch> will continue using the selected version, but switch to 32/64 bit mode.
  nvm root [path]              : Set the directory where nvm should store different versions of node.js.
                                 If <path> is not set, the current root will be displayed.
  nvm version                  : Displays the current running version of nvm for Windows. Aliased as v.

3.2 安装并使用指定版本 nodejs

# 安装lts版本
C:\Windows\system32> nvm install lts
Downloading node.js version 16.16.0 (64-bit)...
Extracting...
Complete
Installation complete. If you want to use this version, type
nvm use 16.16.0

# 安装14.19.3版本
C:\Windows\system32>nvm install 14.19.3
Downloading node.js version 14.19.3 (64-bit)...
Complete
Creating D:\nvm\temp
Downloading npm version 6.14.17... Complete
Installing npm v6.14.17...
Installation complete. If you want to use this version, type
nvm use 14.19.3

# 使用14.19.3作为默认node
C:\Windows\system32> nvm use 14.19.3
Now using node v14.19.3 (64-bit)

C:\Windows\system32> nvm ls
    16.16.0
  * 14.19.3 (Currently using 64-bit executable)

C:\Windows\system32> node -v
v14.19.3

C:\Windows\system32>

3.3 配置 npm 镜像地址,安装常见全局包

# 配置npm使用国内镜像
C:\Windows\system32> npm config set registry https://registry.npmmirror.com

# 全局安装node-gyp包
C:\Windows\system32> npm i -g node-gyp
D:\nvm\nodejs\node-gyp -> D:\nvm\nodejs\node_modules\node-gyp\bin\node-gyp.js
+ node-gyp@9.0.0
added 94 packages from 51 contributors in 4.671s

C:\Windows\system32>

到这里基本上 windows 上的 nvm 配置 nodejs 相关环境就算完成了。

总结

上述是小哥对于nvm的安装和使用的简单整理。主要被使用在更换设备时,以达到快速进行环境配置的目的,避免重复翻阅相关文档浪费时间。其次,对于刚入手nodejs的小新来说,友好度应该也挺高的,避免走弯路。最后,对于nvm的使用上还有哪些问题,欢迎与小哥交流,或者上述有误导地方,也欢迎指正。github:justajwolf

- END -

分类:

前端

标签:

Node.js

作者介绍

justajwolf
V1