coreybutler/nvm-windows
GitHub: coreybutler/nvm-windows
Windows 平台下的 Node.js 版本管理工具,支持多版本安装、快速切换和持久化配置。
Stars: 45199 | Forks: 3742
NVM for Windows
Microsoft/
npm/
Google 推荐的
Windows Node.js 版本管理器。
这与 nvm 不是同一个东西!(点击展开详情)
_最初的 [nvm](https://github.com/nvm-sh/nvm) 是一个完全独立的项目,仅适用于 Mac/Linux。_ 本项目采用了完全不同的理念,不仅仅是 nvm 的克隆。详情列在 [为什么还需要另一个版本管理器?](#bulb-why-another-version-manager) 和 [主要区别是什么?](#bulb-whats-the-big-difference) 中。
[](https://github.com/coreybutler/nvm-windows/releases) []((https://github.com/coreybutler/nvm-windows/releases))   [](https://github.com/coreybutler/nvm-windows/discussions) [](https://twitter.com/intent/tweet?hashtags=nodejs&original_referer=http%3A%2F%2F127.0.0.1%3A91%2F&text=Check%20out%20NVM%20for%20Windows!&tw_p=tweetbutton&url=http%3A%2F%2Fgithub.com%2Fcoreybutler%2Fnvm-windows&via=goldglovecb)
[](https://github.com/coreybutler/nvm-windows/releases/tag/1.1.12) []((https://github.com/coreybutler/nvm-windows/releases/tag/1.1.12/))
最新版 vs 稳定版?
最新版本 (v1.2.x) 是一个[过渡版本]([https://](https://opensource.author.io/nvm-for-windows-v120)),因为我们正在完成 [Runtime](https://github.com/coreybutler/nvm-windows/wiki/Runtime)(NVM for Windows 的继任者)的开发。但是;存在一个已知错误,可能会影响某些用户安装旧(EOL)版本的 Node.js。最后一个稳定版本支持大多数 EOL 版本。
有些公司需要两个版本的特定功能,这在目前的公开发布版本中是不可能的。虽然我们建议等待 Runtime(预计 3 月发布),但如果您需要私有版本,请联系 support@author.io 安排付费支持合同。
## 概述
在 Windows 计算机上管理多个 node.js 安装。
**tl;dr** 与 [nvm](https://github.com/creationix/nvm) 类似(但不完全相同),但适用于 Windows。带有安装程序。[立即下载](https://github.com/coreybutler/nvm-windows/releases)!
这始终是一个 node 版本管理器,而不是 io.js 管理器,因此不支持 io.js。支持 Node 4+。请记住,在运行 `nvm install` 或 `nvm use` 时,Windows 通常需要管理员权限(以创建符号链接)。要安装最新版本的 Node.js,请运行 `nvm install latest`。要安装最新的稳定版本,请运行 `nvm install lts`。

在某些情况下,能够在不同版本的 Node.js 之间切换的能力非常有用。例如,如果您想用最新的前沿版本测试您正在开发的模块,而又不想卸载稳定的 node 版本,此实用程序可以提供帮助。

### 安装与升级
#### :star: :star: 卸载任何预先存在的 Node 安装!! :star: :star:
让 NVM for Windows 正常运行的最简单(推荐)方法是在安装 NVM for Windows 之前卸载任何之前的 Node 安装。这避免了下面列出的所有陷阱。但是;如果您已经高度自定义了 Node 安装,您可能不希望彻底删除它。NVM for Windows _可以_ 接管现有安装的管理,但这有一些细微差别(完全取决于运行安装的用户的权限)。如果您有管理员帐户,在卸载原始 Node 版本之前安装 NVM for Windows 是相对安全的。如果您在封闭环境中工作,例如由组策略控制安装/卸载的企业 Active Directory 环境,您真的应该考虑在安装 NVM4W 之前删除原始版本的 Node。
_权限问题_
出于安全原因,Windows 不允许来自一个供应商的应用程序“卸载”来自不同供应商的应用程序。官方 NVM4W 安装程序将尝试接管现有 Node 安装的管理,但它实际上无法卸载原始 Node.js 版本。为了解决这个问题,NVM for Windows 安装程序尝试将原始 Node.js 安装文件复制到 NVM 根目录。这包括全局 npm 模块和配置。一旦此过程完成,就可以卸载原始 Node.js 安装而不丢失数据。
_PATH 安装问题_
如果您尝试将 `NVM_SYMLINK` 配置为使用现有目录(如 `C:\Program Files\nodejs`),它将失败,因为符号链接无法覆盖物理目录。如果您选择不同的符号链接路径(例如 `C:\nvm\node`),这就不是问题。
_PATH 冲突_
如果您不卸载原始版本,运行 `nvm use` 可能看起来什么都没做。运行 `node -v` 将始终显示原始安装版本。这是由于当同一应用程序安装多次时出现的 [`PATH` 冲突](https://github.com/coreybutler/nvm-windows/wiki/Common-Issues#why-do-i-need-to-uninstall-nodejs-before-installing-nvm-for-windows) 造成的。在 NVM4W 1.1.11+ 中,运行 `nvm debug` 以确定您是否存在 `PATH` 冲突。
为简单起见,我们建议在使用 NVM for Windows 之前卸载任何现有版本的 Node.js。删除可能残留的任何现有 Node.js 安装目录(例如 `%ProgramFiles%\nodejs`)。NVM 生成的符号链接不会覆盖现有的(即使是空的)安装目录。
:eyes: **备份任何全局 `npmrc` 配置** :eyes:
(例如 `%AppData%\npm\etc\npmrc`)
或者,将设置复制到用户配置 `%UserProfile%\.npmrc`。删除现有的 npm 安装位置(例如 `%AppData%\npm`)以防止全局模块冲突。
#### 安装 nvm-windows
使用[最新安装程序](https://github.com/coreybutler/nvm/releases)(带有卸载程序)。或者,按照[手动安装](https://github.com/coreybutler/nvm-windows/wiki#manual-installation)指南操作。
_如果安装后 NVM4W 似乎无法立即工作,请重启终端/powershell(而不是整个计算机)。_

#### 重新安装任何全局实用程序
安装后,必须为每个已安装的 node 版本重新安装全局实用程序(例如 yarn):
```
nvm use 14.0.0
npm install -g yarn
nvm use 12.0.1
npm install -g yarn
```
### 升级 nvm-windows
:bulb: _从 v1.1.8 开始,有一个升级实用程序可以自动化升级过程。_
**要升级 nvm-windows**,请运行新的安装程序。它将安全地覆盖需要更新的文件,而不会触及您的 node.js 安装。确保您使用相同的安装和符号链接文件夹。如果您最初安装到默认位置,只需在每个窗口中点击“下一步”直到完成即可。
### 用法
**nvm-windows 在管理员 Shell 中运行**。您需要以管理员身份启动 `powershell` 或命令提示符才能使用 nvm-windows
NVM for Windows 是一个命令行工具。只需在控制台中输入 `nvm` 即可获得帮助。基本命令包括:
- **`nvm arch [32|64]`**:显示 node 是在 32 位还是 64 位模式下运行。指定 32 或 64 以覆盖默认架构。
- **`nvm debug`**:检查 NVM4W 进程是否存在已知问题。
- **`nvm current`**:显示当前激活的版本。
- **`nvm install
[arch]`**:版本可以是特定版本,“latest”表示最新的当前版本,或“lts”表示最近的 LTS 版本。可选择指定是安装 32 位还是 64 位版本(默认为系统架构)。将 [arch] 设置为“all”以同时安装 32 位和 64 位版本。在此命令末尾添加 `--insecure` 以绕过远程下载服务器的 SSL 验证。
- **`nvm list [available]`**:列出 node.js 安装。在末尾输入 `available` 以显示可供下载的版本列表。
- **`nvm on`**:启用 node.js 版本管理。
- **`nvm off`**:禁用 node.js 版本管理(不卸载任何内容)。
- **`nvm proxy [url]`**:设置用于下载的代理。将 `[url]` 留空以查看当前代理。将 `[url]` 设置为“none”以移除代理。
- **`nvm uninstall `**:卸载特定版本。
- **`nvm use [arch]`**:切换到指定版本。可选择使用 `latest`、`lts` 或 `newest`。`newest` 是最新_已安装_的版本。可选择指定 32/64 位架构。`nvm use ` 将继续使用所选版本,但切换到 32/64 位模式。有关在特定目录中使用 `use`(或使用 `.nvmrc`)的信息,请参阅 [issue #16](https://github.com/coreybutler/nvm-windows/issues/16)。
- **`nvm root `**:设置 nvm 应存储不同版本 node.js 的目录。如果未设置 ``,将显示当前根目录。
- **`nvm version`**:显示当前运行的 NVM for Windows 版本。
- **`nvm node_mirror `**:设置 node 镜像。中国用户可以使用 *https://npmmirror.com/mirrors/node/*
- **`nvm npm_mirror `**:设置 npm 镜像。中国用户可以使用 *https://npmmirror.com/mirrors/npm/*
### :warning: 注意事项!
请注意,您可能已安装的任何全局 npm 模块在您安装的各种 node.js 版本之间**不**共享。此外,某些 npm 模块可能不支持您正在使用的 node 版本,因此在工作时请注意您的环境。
### :name_badge: 杀毒软件
用户报告了一些使用杀毒软件的问题,特别是 McAfee。看来杀毒软件正在操纵对 VBScript 引擎的访问。有关详细信息和解决方案,请参阅 [issue #133](https://github.com/coreybutler/nvm-windows/issues/133)。
**v1.1.8 未进行代码签名**,但所有其他版本均由 [Ecor Ventures LLC](https://ecorventures.com)/[Author.io](https://author.io) 签名。这应该有助于防止大多数杀毒软件的误报。
### 使用 Yarn
**tldr;** `npm i -g yarn`
有关详细信息,请参阅 [wiki](https://github.com/coreybutler/nvm-windows/wiki/Common-Issues#how-do-i-use-yarn-with-nvm-windows)。
### 从源代码构建
- 从 http://golang.org 安装 go
- 下载源代码 / Git Clone 该仓库
- 如果您想构建 64 位可执行文件,请在 build.bat 中将 GOARCH 更改为 amd64
- 启动 Windows 命令提示符并将目录更改为项目目录
- 执行 `go get github.com/blang/semver`
- 执行 `go get github.com/oleukonko/tablewriter`
- 执行 `build.bat`
- 检查 `dist` 目录以获取生成的安装程序。
## :bulb: 为什么需要另一个版本管理器?
已经有好几个 node.js 的版本管理器。像 [nvm](https://github.com/creationix/nvm) 和 [n](https://github.com/tj/n) 这样的工具
只能在 Mac OSX 和 Linux 上运行。Windows 用户被冷落了吗?不。[nvmw](https://github.com/hakobera/nvmw) 和 [nodist](https://github.com/marcelklehr/nodist)
都是专为 Windows 设计的。那么,为什么还需要另一个 Windows 版本管理器呢?
大多数 Windows node 版本管理器的架构依赖于 `.bat` 文件,这些文件通过一些巧妙的技巧来设置或模拟环境变量。其中一些使用 node 本身(一旦下载),这令人钦佩,但容易出问题。就在 node 0.10.30 左右,安装结构发生了一些变化,导致其中一些工具无法处理任何新版本。
此外,一些用户在安装这些模块时遇到了困难,因为它需要对 node 的安装结构有更多的了解。我相信如果人们更容易地在版本之间切换,他们可能会花时间在向后和未来的版本上测试他们的代码……这只是良好的实践。
## :bulb: 主要区别是什么?
首先也是最重要的是,这个版本的 nvm 不依赖于 node。它是用 [Go](https://golang.org/) 编写的,这是比在有限的 `.bat` 文件周围修修补补更结构化的方法。它不依赖于现有的 node 安装。Go 提供了在相同代码库上创建 Mac/Linux 版本的能力。事实上,这已经在进行中。
控制机制也大不相同。有两种通用方法支持具有热切换功能的多个 node 安装。第一种是在每次切换版本时修改系统 `PATH`,或者通过使用 `.bat` 文件模拟 node 可执行文件并进行相应的重定向来绕过它。这对我来说总是有点像黑客做法,并且由于这种实现,存在一些怪癖。
第二种选择是使用符号链接。这个概念需要将符号链接放在系统 `PATH` 中,然后将其目标更新为您想要使用的 node 安装目录。这是一种直接的方法,似乎也是人们推荐的……直到他们意识到在 Windows 上处理符号链接有多么痛苦。这就是为什么以前没有发生过这种情况的原因。
为了创建/修改符号链接,您必须以管理员身份运行,并且必须绕过 Windows UAC(那个烦人的提示)。幸运的是,这是我在 [node-windows](https://github.com/coreybutler/node-windows) 中使用一些辅助脚本已经解决的挑战。因此,NVM for Windows 维护一个符号链接,该链接仅在安装期间放入系统 `PATH`。切换到不同版本的 node 只是切换符号链接目标的问题。因此,此实用程序**不**要求您每次打开控制台窗口时都运行 `nvm use x.x.x`。当您_确实_运行 `nvm use x.x.x` 时,node 的活动版本会在所有打开的控制台窗口中自动更新。它还在系统重启之间持久存在,因此您只需在想要进行更改时使用 nvm。
NVM for Windows 附带一个安装程序,这得益于我在 [Fenix Web Server](https://preview.fenixwebserver.com) 上的工作产生的一个副产品。
总的来说,这个项目汇集了一些想法,一些经过实战检验的其他模块的部分,以及对更新版本 node 的支持。
NVM for Windows 使用 Node 项目提供的[列表](https://nodejs.org/download/release/index.json)识别“最新”版本。版本 1.1.1+ 使用此列表。在此列表存在之前,我抓取发布版本并将其作为独立的[数据源](https://github.com/coreybutler/nodedistro)提供服务。此列表在 1.1.0 及更早版本中使用,但现已弃用。
## 动机
我需要它,很简单。此外,显然[对多个版本的支持](https://github.com/nodejs/node-v0.x-archive/issues/8075)不会进入 node 核心。这也是一个玩 Go 的借口。
## 为什么选择 Go?为什么不是 Node?
我选择 Go 是因为它是跨平台的,感觉比 Java 开销更小,存在的时间比大多数人认为的要长。另外,我想试验一下它。有人问我为什么不用 Node 写。试图用你试图安装的工具来编写工具对我来说没有意义。因此,我对此的项目要求很简单……不是 Node 的东西。Node 将继续发展和变化。如果您需要提醒,请记住 io.js、Ayo、4.x.x 和 6.x.x 之间的所有重大更改,以及 12+ 中向 ES Modules 的转变。在软件世界中,变化是不可避免的。JavaScript 是极其动态的。
## :pray: 致谢
感谢所有在 Github 内外提交问题、提出建议并普遍帮助改进此项目的人。特别感谢
- [@vkbansal](https://github.com/vkbansal),他在早期版本中提供了大量早期反馈。
- [@rainabba](https://github.com/rainabba) 和 [@sullivanpt](https://github.com/sullivanpt) 集成了 Node v4 支持。
- [@s-h-a-d-o-w](https://github.com/s-h-a-d-o-w) 解决了路径名中长期存在的空格转义问题([#355](https://github.com/coreybutler/nvm-windows/pull/355))。
- [ajyong](https://github.com/ajyong) 赞助了 2021 年底的代码签名证书。
 标签:AI合规, EVTX分析, EVTX分析, EVTX分析, Google 推荐, Go 语言, Node.js 版本管理, npm, NVM, SOC Prime, Windows 软件, 包管理, 开发工具, 微软推荐, 数据集, 日志审计, 版本管理器, 环境配置, 系统工具, 运行时管理