# nvs **Repository Path**: wsz7777/nvs ## Basic Information - **Project Name**: nvs - **Description**: nodejs 版本控制工具 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: gitee - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 5 - **Forks**: 2 - **Created**: 2021-03-28 - **Last Updated**: 2024-09-09 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # NVS (Node Version Switcher) [![Build Status: Mac + Linux](https://travis-ci.org/jasongin/nvs.svg?branch=master)](https://travis-ci.org/jasongin/nvs) [![Build status: Windows](https://ci.appveyor.com/api/projects/status/p0mo0nobkf0ws7ie/branch/master?svg=true)](https://ci.appveyor.com/project/jasongin/nvs) NVS是一个跨平台的Node.js的版本切换工具,并且NVS本身是用 [**Node.js**](http://nodejs.org) 编写的。 这个工具显然是受到其他Node.js版本管理器工具的启发,特别是 [**nvm**](https://github.com/creationix/nvm) ,它借鉴了很多思想和一些命令行语法。 ## 以下是基本的设置说明。 [有关设置NVS的更多细节和选项,请参阅设置页面。](doc/SETUP.md) ### Windows windows 的MSI安装包可以从 [NVS releases page on GitHub](https://github.com/wsz7777/nvs/releases) 这里获得。 你也可以通过 [chocolatey](https://chocolatey.org) 安装: ``` choco install nvs ``` ### Mac, Linux 指定安装路径,克隆repo,并输入安装命令: ``` 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](doc/CI.md) 可以在 Travis CI 中使用。 去使用 NVS 测试下载任何版本的 Node.js 环境。 ## 基础使用 下载最新版本的 Node.js: ``` $ nvs add latest ``` 下载lts版本的 Node.js: ``` $ nvs add lts ``` 运行 `nvs use` 去选择 Node.js 的版本 ``` $ nvs use lts PATH += ~/.nvs/node/6.9.1/x64 ``` 使用 `nvs link` 添加默认的 Node.js 版本: ``` $ 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 大概是这样,可以自行发掘更多用法 有关每个命令的更多详细信息 [请参阅文档](./doc) ## 互动菜单 不带参数调用时,将 `nvs` 显示一个交互式菜单,用于切换和下载 Node.js 版本。 ![nvs 菜单](https://gitee.com/wsz7777/nvs/releases/download/v0.8.0/nvs-menu.gif) *NVS 使用 [**console-menu**](https://gitee.com/wsz7777/console-menu), 最初 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: ```json "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 文档](doc/VSCODE.md) 或者执行命令 `nvs help vscode`. ## 配置 remotes `nvs remote` 命令允许配置多个命名的下载位置。NVS 分别管理来自不同远程位置的版本,因此没有版本冲突的风险。默认情况下,只有一个远程指向 Node.js 官方版本: ``` $ nvs remote default node node https://npm.taobao.org/mirrors/node/ ``` 这样就可以从其他来源获得构建。以下命令序列为 nightly 添加了一个远程 remote,列出了 nightly ,并添加了一个构建: ``` $ nvs remote add nightly https://nodejs.org/download/nightly/ $ nvs lsr nightly/13 nightly/13.1.1-nightly20191120c7c566023f ... $ nvs add nightly/13 ``` 添加其他 remote: ``` nvs remote add iojs https://iojs.org/dist/ nvs remote add chakracore https://nodejs.org/download/chakracore-release/ ``` ## 别名 别名是指远程名称和语义版本的组合。(不对处理器体系结构进行别名。)设置别名时,可以省略远程名称,在这种情况下,别名是指默认的远程。在其他任何命令中,都可以使用别名代替版本字符串。 ``` $ nvs alias myalias 6.7.0 $ nvs alias myalias default/6.7.0 $ nvs run myalias --version v6.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 ``` [别名也可以引用本地目录](doc/ALIAS.md#aliasing-directories),从而使NVS可以切换到Node.js的本地私有版本。 ## 根据目录自动切换版本 在Bash或PowerShell中,NVS可以在更改目录时自动切换当前Shell中的Node.js版本。默认情况下,此功能处于禁用状态。使它运行 `nvs auto on`。之后,无论何时 `cd` 或 `pushd` 在包含 `.node-version`或[`.nvmrc`](https://github.com/nvm-sh/nvm#nvmrc) 文件的目录下,NVS都会相应地自动切换Node.js版本,并在必要时下载新版本。当您 `cd` 到达目录上方没有目录 `.node-version` 或 `.nvmrc` 文件的目录时,将还原默认(链接)版本(如果有)。 ``` ~$ nvs link 6.9.1 ~/.nvs/default -> ~/.nvs/node/6.9.1/x64 ~$ nvs use PATH += ~/.nvs/default/bin ~$ nvs auto on ~$ cd myproject PATH -= ~/.nvs/default/bin PATH += ~/.nvs/node/4.6.1/x64/bin ~/myproject$ cd .. PATH -= ~/.nvs/node/4.6.1/x64/bin PATH += ~/.nvs/default/bin ``` *Windows命令提示符中不提供此功能。请用PowerShell。* ## 手动切换使用 `.node-version` 如果您的外壳与自动切换不兼容,或者您​​希望手动切换但仍利用其中的任何一个 `.node-version` or `.nvmrc` 文件,则可以 `nvs use` 使用该版本运行,也可以 `auto` 直接运行 `nvs auto`. ``` $ nvs use auto ``` 相当于 ``` $ 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版本,并使用标记当前路径中的版本 `>`,并使用标记默认(链接的)版本(如果有)`#` 。这些可以相同或不同。例如: ``` 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` 在引导时需要。