NVS —— js 实现的node版本管理工具

NVS (Node Version Switcher)

nvs 是一个跨平台的 node.js 的版本切换工具,并且 nvs 本身是用node.js[1]编写的。

这个工具显然是受到其他 Node.js 版本管理器工具的启发,特别是nvm[2],它借鉴了很多思想和一些命令行语法。

以下是基本的设置说明。有关设置 NVS 的更多细节和选项,请参阅设置页面。[3]

Windows

windows 的 MSI 安装包可以从NVS releases page on GitHub[4]这里获得。你也可以通过chocolatey[5]安装:

代码语言:javascript代码运行次数:0运行复制
choco install nvs
Mac, Linux

指定安装路径,克隆 repo,并输入安装命令:

代码语言:javascript代码运行次数:0运行复制
export NVS_HOME="$HOME/.nvs"git clone https://gitee.com/wsz7777/nvs "$NVS_HOME". "$NVS_HOME/nvs.sh" install

这个

nvs.sh
是向环境变量中添加
nvs
的 shell 方法. 执行这个脚本后,你就可以在命令行中直接使用
nvs
了。请添加这个
install
命令至
~/.bashrc
,
~/.profile
, 或者
~/.zshrc
文件中。以便该
nvs
功能在你的 shell 中可用.

对于 ksh, 这个脚本

nvs.sh
需要添加到
~/.kshrc
中,或者是
$ENV
的地方。

CI 支持

NVS can be used in a CI environment[6]可以在 Travis CI 中使用。去使用 NVS 测试下载任何版本的 Node.js 环境。

基础使用

下载最新版本的 Node.js:

代码语言:javascript代码运行次数:0运行复制
$ nvs add latest

下载 lts 版本的 Node.js:

代码语言:javascript代码运行次数:0运行复制
$ nvs add lts

运行

nvs use
去选择 Node.js 的版本

代码语言:javascript代码运行次数:0运行复制
$ nvs use ltsPATH += ~/.nvs/node/6.9.1/x64

使用

nvs link
添加默认的 Node.js 版本:

代码语言:javascript代码运行次数:0运行复制
$ nvs link lts
Command 介绍

命令

描述

nvs help

获取命令的详细帮助

nvs install

初始化并使用 NVS

nvs uninstall

从 profile 和 environment 中移除 NVS

nvs --version

展示 NVS 版本

nvs add [version]

下载某个版本的 Node.js

nvs rm

移除某个版本的 Node.js

nvs migrate [tover]

迁移全局的 node_modules

nvs upgrade [fromver]

更新当前环境的 Node.js 至最新版本

nvs use [version]

选择使用某个版本的 Node.js

nvs auto [on/off]

使用 cwd 自动切换

nvs run [args...]

使用 Node.js 的某个版本的去执行 js 应用

nvs exec [args...]

使用 Node.js 的某个版本的去执行 可执行文件

nvs which [version]

显示 Node.js 的某个版本的二进制文件的路径

nvs ls [filter]

展示本地下载的 Node.js 版本列表

nvs ls-remote [filter]

列出可下载的 Node.js 版本

nvs lsr [filter]

同上

nvs link [version]

设置一个软连接指向一个版本,作为默认使用的版本

nvs unlink [version]

删除指向默认版本的链接

nvs alias [name] [value]

给某个版本设置一个别名

nvs remote [name] [value]

设置下载 node 的仓库

[version]
[filter]
是用来描述版本的,有以下一些情况

情况

例子

完整的版本号

15.14.0、0.6.11

不完整版本号

14、15、8

标签

lts, latest, Argon

远程安装仓库名

node、node/15.12.0 。如果使用 nvs remote 添加了远程仓库名为 taobao 那就可以使用 taobao、taobao/15.13.0

远程仓库名斜线后的部分

lts, 4.6.0, 6/x86, node/6.7/x64

大概是这样,可以自行发掘更多用法。

有关每个命令的更多详细信息请参阅文档[7]

互动菜单

不带参数调用时,将

nvs
显示一个交互式菜单,用于切换和下载 Node.js 版本。

NVS 使用console-menu[8], 最初 console-menu 是为该项目编写的,然后单独发布。

VS Code 支持

Visual Studio Code 可以使用 NVS 选择启动或调试时要使用的 Node.js 版本。在

launch.json
.vscode
位于项目根文件夹中的文件夹中)中,添加
"runtimeArgs"
带有 NVS 版本字符串的
"runtimeExecutable"
属性 ,以及指向
nvs.cmd
(Windows)或
nvs
(Mac, Linux)。(如果 NVS 不在 VS Code 的 PATH 环境变量中,您可能需要指定一个绝对路径,例如
"${env:HOME}/.nvs/nvs"
)

配置示例:

launch.json
使用 VS Code 使用 NVS 启动 Node.js 版本 6.10:

代码语言:javascript代码运行次数:0运行复制
  "configurations": [    {      "type": "node",      "request": "launch",      "name": "Launch Program",      "program": "${file}",      "args": [ ],      "runtimeArgs": [ "6.10" ],      "windows": { "runtimeExecutable": "nvs.cmd" },      "osx": { "runtimeExecutable": "nvs" },      "linux": { "runtimeExecutable": "nvs" }    },  ]

或者,从中删除版本字符串,

"runtimeArgs"
.node-version
文件或文件夹中获取版本。有关更多详细信息,请参见NVS VS Code 文档[9]或者执行命令
nvs help vscode
.

配置 remotes

nvs remote
命令允许配置多个命名的下载位置。NVS 分别管理来自不同远程位置的版本,因此没有版本冲突的风险。默认情况下,只有一个远程指向 Node.js 官方版本:

代码语言:javascript代码运行次数:0运行复制
$ nvs remotedefault  nodenode     https://npm.taobao.org/mirrors/node/

这样就可以从其他来源获得构建。以下命令序列为 nightly 添加了一个远程 remote,列出了 nightly ,并添加了一个构建:

代码语言:javascript代码运行次数:0运行复制
$ nvs remote add nightly https://nodejs.org/download/nightly/$ nvs lsr nightly/13nightly/13.1.1-nightly20191120c7c566023f...$ nvs add nightly/13

添加其他 remote:

代码语言:javascript代码运行次数:0运行复制
nvs remote add iojs https://iojs.org/dist/nvs remote add chakracore https://nodejs.org/download/chakracore-release/
别名

别名是指远程名称和语义版本的组合。(不对处理器体系结构进行别名。)设置别名时,可以省略远程名称,在这种情况下,别名是指默认的远程。在其他任何命令中,都可以使用别名代替版本字符串。

代码语言:javascript代码运行次数:0运行复制
$ nvs alias myalias 6.7.0$ nvs aliasmyalias default/6.7.0$ nvs run myalias --versionv6.7.0$ nvs which myalias~/.nvs/node/6.7.0/x64/bin/node$ nvs which myalias/32~/.nvs/node/6.7.0/x86/bin/node

别名也可以引用本地目录[10],从而使 NVS 可以切换到 Node.js 的本地私有版本。

根据目录自动切换版本

在 Bash 或 PowerShell 中,NVS 可以在更改目录时自动切换当前 Shell 中的 Node.js 版本。默认情况下,此功能处于禁用状态。使它运行

nvs auto on
。之后,无论何时
cd
pushd
在包含
.node-version
或.nvmrc[11]文件的目录下,NVS 都会相应地自动切换 Node.js 版本,并在必要时下载新版本。当您
cd
到达目录上方没有目录
.node-version
.nvmrc
文件的目录时,将还原默认(链接)版本(如果有)。

代码语言:javascript代码运行次数:0运行复制
~$ nvs link 6.9.1~/.nvs/default -> ~/.nvs/node/6.9.1/x64~$ nvs usePATH += ~/.nvs/default/bin~$ nvs auto on~$ cd myprojectPATH -= ~/.nvs/default/binPATH += ~/.nvs/node/4.6.1/x64/bin~/myproject$ cd ..PATH -= ~/.nvs/node/4.6.1/x64/binPATH += ~/.nvs/default/bin

Windows 命令提示符中不提供此功能。请用 PowerShell。

手动切换使用
.node-version

如果您的外壳与自动切换不兼容,或者您 希望手动切换但仍利用其中的任何一个

.node-version
or
.nvmrc
文件,则可以
nvs use
使用该版本运行,也可以
auto
直接运行
nvs auto
.

代码语言:javascript代码运行次数:0运行复制
$ nvs use auto

相当于

代码语言:javascript代码运行次数:0运行复制
$ nvs auto
如何运行的Bootstrapping node

NVS 使用特定于平台的

shell
程序代码是比较少的,这些代码通过自动下载 Node.js 的私有副本来引导工具。引导代码仅是 Windows 命令脚本,Windows powershell 脚本和几十行的 POSIX shell 脚本。除引导程序外,shell 脚本还用于将 PATH 更改导出到调用 shell(单独的 Node.js 进程无法执行)。但是,所有用于查询可用版本,下载和安装 Node.js 以及匹配 npm ,切换版本/体系结构/引擎,卸载,解析和更新 PATH 等的代码都可以用 JavaScript 编写,并且大多数都是以跨平台的方式编写的。

版本切换

NVS 下载 Node.js 版本在

NVS_HOME
环境变量指定的目录下,或者在
NVS_HOME
未设置的 NVS 工具目录下。例如,每个构建都位于基于远程名称,语义版本和体系结构的子目录中
node/6.7.0/x64
.

当您使用

nvs use
一个版本时, 当前
shell
的会更新
PATH
为包括该版本的
bin
目录.

全局模块

与 NVS 安装的 Node.js 一起使用

npm install -g
or
npm link
与之配合使用时,将安装全局模块或将其链接到特定于版本的目录中。(NVS 清除
NPM_CONFIG_PREFIX
可能已设置的任何环境变量。)这意味着,在 NVS 切换版本时,它也在切换可用的全局模块集。该
nvs migrate
命令可以将这些全局模块从一个 Node.js 版本迁移到另一 Node.js 版本。

Symbolic 链接

nvs link
命令在
$NVS_HOME/default
指向指定版本(或命令时的当前版本)的位置创建符号目录链接
PATH
。当需要在其他地方配置固定路径时,这很有用。

在非 Windows 平台上,如果存在链接,则提供

nvs.sh
脚本来源的新外壳程序也将设置
PATH
为包括默认版本。在 Windows 上,
PATH
环境变量在用户配置文件中更新,因此新的 Shell 将使用默认版本。

nvs ls
命令列出所有本地 Node.js 版本,并使用标记当前路径中的版本
>
,并使用标记默认(链接的)版本(如果有)
#
。这些可以相同或不同。例如:

代码语言:javascript代码运行次数:0运行复制
  node/4.5.0/x64 #node/4.6.0/x64 >node/6.7.0/x64
系统 linking

如果

$NVS_HOME
在诸如
/usr/local
or
%ProgramFiles%
,
nvs link
命令还会链接到众所周知的 Node.js 系统位置。(仅当尚无系统安装的 Node.js 时才允许这样做。)

在非 Windows 平台上,为
node
创建符号链接
/usr/local/bin
,
npm
以及具有可执行任何全球安装的 Node.js 模块。请注意,在安装或卸载包含可执行文件的全局模块之后,可能需要再次运行
nvs link
以更新全局链接。使用 NVS 链接不同版本的 Node.js(具有不同的全局模块)会相应地更新所有链接。在 Windows 上,在创建符号目录链接
%ProgramFiles%\Nodejs
,并将该目录添加到系统
PATH
中。

$NVS_HOME
指向非系统目录时,将跳过此系统链接功能,因为在系统目录中创建到用户文件的符号链接是错误的。

依赖关系

除了自动下载的节点的私有副本之外,NVS 没有任何外部依赖关系。运行时 JS 软件包的相关性很小,并且已在存储库中签入,以避免

npm install
在引导时需要。

参考资料

[1] Node.js: http://nodejs.org/

[2] nvm: https://github.com/creationix/nvm

[3] 有关设置 NVS 的更多细节和选项,请参阅设置页面。: https://gitee.com/wsz7777/nvs/tree/gitee/doc/SETUP.md

[4] NVS releases page on GitHub: https://github.com/wsz7777/nvs/releases

[5] chocolatey: https://chocolatey.org/

[6] NVS can be used in a CI environment: https://gitee.com/wsz7777/nvs/tree/gitee/doc/CI.md

[7] 请参阅文档: https://gitee.com/wsz7777/nvs/tree/gitee/doc

[8] console-menu: https://gitee.com/wsz7777/console-menu

[9] NVS VS Code 文档: https://gitee.com/wsz7777/nvs/tree/gitee/doc/VSCODE.md

[10] 别名也可以引用本地目录: https://gitee.com/wsz7777/nvs/tree/gitee/doc/ALIAS.md#aliasing-directories

[11]

.nvmrc
: https://github.com/nvm-sh/nvm#nvmrc

[12] 原文链接:https://github.com/jasongin/nvs/blob/master/LICENSE.txt