迁移到NVS(NodeVersionSwitcher)来管理NodeJS版本

最近工作在有信息管控的厂内,配发的电脑是受限用户账户,使用 NVM for Windows 来切换版本的话,会有访问被拒绝的情况,需要使用管理员权限来切换。这在日常工作中会是一件十分麻烦的事情,每次切换版本都需要去找IT Admin授权。

之前刚入职配置开发环境的时候就遇到过使用 NVM4W 切换版本的时候会出现访问被拒绝的问题(提示 exit status 1: Access is denied.),需要管理员权限才可以切换,只不过现在负责的都是新项目不需要切换 NodeJS 的版本,所以当时指定完当前 Node 版本为 LTS 之后就放弃纠结了。

昨天小伙伴也遇到了需要切换版本的情况,我也因为时间间隔太久了就和他说可以使用NVM4W来切换,他尝试之后发现并不行。

正好我手头上也忙完了大部分工作内容就研究了一下如果来解决这个情况。在浏览 NVM4W 的 Discussions 时,看到了 一篇帖子,其中有人提到了 NVS,所以在V2EX提问之后就去了解了一下,以下步骤皆为 Win10 环境下,Mac 及 Linux 可以查看仓库的 README


💾 安装

安装很简单,通过仓库的 releases 直接下载最新的 .msi 文件就可以了,双击运行即可,默认安装到当前用户下(既不会出现受限用户账户的授权弹窗)。

- 原来安装的 NVM4WNodeJS 可以不用卸载,如果有强迫症可以先删除再安装 NVS (发文时最新版本为 v1.6.2 )。
- 记得先查看一下全局依赖项,避免之后因为卸载 NodeJS 之后记不起来装了些什么,如果是维护在外部目录的可以不用管,之后重新设置到旧目录即可。

📥 下载 Node 版本

  1. 可以直接在终端键入 nvs 通过终端操作界面来下载和切换Node版本。
  2. 使用 nvs ls-remove 查看可用版本后使用 nvs add x.y.z 来下载指定版本。
  3. 使用 nvs add lts 通过别名快速下载对应版本,可用别名:ltslatestArgon 等。

🔓 切换/指定 Node 版本

  1. 指定当前终端的 Node 版本
    • nvs use [version]
  2. 指定全局环境下的 Node 版本
    • nvs link [version]
  3. 根据项目自动切换 Node 版本
    • 项目目录下如果有 .node-version 或者 .nvmrcNVS 会自动切换 Node 为指定版本;
      • 文件中直接指定版本号或者别名都可,具体可以查看 doc/AUTO Command;
      • 例如直接在文件中键入 lts 并保存。
    • 该功能默认是关闭的,需要手动键入 nvs auto on 打开;
    • 该功能在CMD终端中并不支持,需要在 PowerShell 中使用。

🌏 指定 npm 全局依赖位置

一般来说我会直接指定一个外部目录为全局依赖安装目录,这样的话在切换不同版本的 Node 时,不需要重新安装全局依赖了。

  • NVS 提供了一个 nvs migrate 命令可以指定某一个版本的全局模块,但是这个命令还没接触过就不多阐述了,想要了解的可以直接查看文档

遇到问题

# 使用 nvs ls-remote 查看可用版本时提示超时

远程节点切换到阿里镜像就可以了:

nvs remote node https://npmmirror.com/mirrors/node/

📚 文档

Node Version Switcher - A cross-platform tool for switching between versions and forks of Node.js
科普文:使用 nvs 管理本地 Node.js 版本 - 知乎
从 nvm 迁移到 nvs | Unknown Me
[node]nvs使用的注意事项 - 掘金
在信息管控的厂内如何使用比如说 NVM 之类会执行脚本的工具 - V2EX