注意:我们已经开始全职开发 Runtime,这是 NVM for Windows 的继任者。
请填写此表单以提供您的想法并订阅进度更新。更新也将发布在 Author Software LinkedIn 页面上。
Windows 版 NVM
这与 nvm 不是同一个东西!(展开查看详情)
原始的 nvm 是一个完全独立的仅适用于 Mac/Linux 的项目。 本项目采用了完全不同的理念,并非仅仅是 nvm 的克隆版。详情请参阅为什么需要另一个版本管理器?和有什么重大区别?。
赞助商
无法赞助? 考虑提名@coreybutler获得Github之星。 |
征求反馈:我们正在开发Runtime (rt),这是NVM For Windows的后继版本。请花一分钟时间填写此表单来提供反馈。谢谢! |
概述
在Windows计算机上管理多个node.js安装版本。
简而言之 类似于(但不完全相同)nvm,但适用于Windows。有安装程序。立即下载!
这一直是一个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.js 安装,但它无法真正卸载原始的 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
冲突。在 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
使用最新安装程序(附带卸载程序)。或者,按照手动安装指南进行操作。
如果 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 <版本> [架构]
:版本可以是特定版本、"latest"表示最新当前版本,或"lts"表示最新LTS版本。可选择指定安装32位或64位版本(默认为系统架构)。将[架构]设为"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 <版本> [架构]
:切换使用指定版本。可选用latest
、lts
或newest
。newest
是最新安装的版本。可选指定32/64位架构。nvm use <架构>
将继续使用所选版本,但切换到32/64位模式。关于在特定目录使用use
(或使用.nvmrc
)的信息,请参考issue #16。nvm root <路径>
:设置nvm存储不同node.js版本的目录。如未设置<路径>
,将显示当前根目录。nvm version
:显示当前运行的NVM for Windows版本。nvm node_mirror <node镜像url>
:设置node镜像。中国用户可使用https://npmmirror.com/mirrors/node/nvm npm_mirror <npm镜像url>
:设置npm镜像。中国用户可使用https://npmmirror.com/mirrors/npm/
:warning: 注意事项!
请注意,您可能安装的任何全局npm模块在不同版本的node.js之间不共享。此外,某些npm模块可能不支持您正在使用的node版本,因此在工作时请注意您的环境。
:name_badge: 防病毒软件
用户报告使用防病毒软件时遇到一些问题,特别是McAfee。似乎防病毒软件正在操纵对VBScript引擎的访问。详情和解决方案请参见issue #133。
v1.1.8未进行代码签名,但所有其他版本均由Ecor Ventures LLC/Author.io签名。这应该有助于防止大多数防病毒软件的误报。
由于证书过期,v1.1.8+未进行代码签名(原因见发布说明)。v1.1.9已进行代码签名,感谢ajyong赞助了新证书。
使用Yarn
简而言之: npm i -g yarn
详情请参见wiki。
从源代码构建
- 从http://golang.org安装go
- 下载源代码/Git克隆仓库
- 如果想构建64位可执行文件,请在build.bat中将GOARCH更改为amd64
- 打开Windows命令提示符并切换到项目目录
- 执行
go get github.com/blang/semver
- 执行
go get github.com/olekukonko/tablewriter
- 执行
build.bat
- 在
dist
目录中查看生成的安装程序。
:bulb: 为什么要开发另一个版本管理器?
node.js有几个版本管理器。像nvm和n这样的工具只在Mac OSX和Linux上运行。Windows用户被遗忘了吗?不是的。nvmw和nodist都是为Windows设计的。那么,为什么要为Windows开发另一个版本管理器呢?
大多数Windows版node版本管理器的架构依赖于.bat
文件,这些文件使用一些巧妙的技巧来设置或模拟环境变量。有些使用node本身(一旦下载),这很值得赞赏,但容易出现问题。大约在node 0.10.30左右,安装结构稍有变化,导致其中一些无法与任何新版本一起工作。
此外,一些用户在安装这些模块时遇到困难,因为它需要对node的安装结构有更多了解。我认为,如果人们能更容易地在版本之间切换,他们可能会花时间在以前和未来的版本上测试他们的代码...这是一个良好的实践。
:bulb: 有什么大的区别?
首先最重要的是,这个版本的nvm不依赖于node。它是用Go编写的,这是一种比在有限的.bat
文件上进行黑客攻击更结构化的方法。它不依赖于现有的node安装。Go提供了在同一代码库上创建Mac/Linux版本的能力。事实上,这项工作已经在进行中。
控制机制也有很大的不同。有两种常见的方法可以支持多节点安装并具有热切换功能。第一种是在切换版本时修改系统的PATH
,或者通过使用.bat
文件来模拟node可执行文件并相应地重定向。这种方法在我看来总是有点黑客式的,而且由于这种实现方式会产生一些怪异的问题。
第二种选择是使用符号链接。这个概念需要将符号链接放入系统的PATH
中,然后更新其目标到你想使用的node安装目录。这是一种直接的方法,似乎也是人们推荐的方法……直到他们意识到在Windows上创建符号链接有多麻烦。这就是为什么之前没有人这么做的原因。
为了创建/修改符号链接,你必须以管理员身份运行,并且必须绕过Windows UAC(那个烦人的提示)。幸运的是,这个挑战我已经在node-windows中用一些辅助脚本解决了。因此,Windows版NVM只在安装时在系统PATH
中维护一个单一的符号链接。切换到不同版本的node只是切换符号链接的目标。结果是,这个工具不要求你每次打开控制台窗口时都运行nvm use x.x.x
。当你_确实_运行nvm use x.x.x
时,node的活动版本会自动在所有打开的控制台窗口中更新。它还会在系统重启后保持,所以你只需要在想要做出改变时使用nvm。
Windows版NVM带有一个安装程序,这要归功于我在Fenix Web Server上工作的副产品。
总的来说,这个项目结合了一些想法,几个经过实战考验的其他模块的部分,以及对较新版本node的支持。
Windows版NVM使用Node项目提供的列表来识别"最新"版本。1.1.1+版本使用这个列表。在这个列表存在之前,我曾经抓取发布信息并将其作为独立的数据源提供。这个列表在1.1.0及之前的版本中使用,但现在已经废弃。
动机
我需要它,就是这么简单。此外,很明显对多版本的支持不会出现在node核心中。这也是一个玩Go的借口。
为什么选择Go?为什么不用Node?
我选择Go是因为它是跨平台的,感觉比Java的开销小,而且存在的时间比大多数人想象的要长。另外,我想尝试一下。有人问我为什么不用Node来写。用你试图安装的工具来写一个工具对我来说没有意义。因此,我对这个项目的要求很简单……选择一个不是Node的东西。Node将继续发展和变化。如果你需要提醒,请记住io.js、Ayo、4.x.x和6.x.x之间的所有破坏性变更,以及12+中向ES模块的转变。在软件世界中,变化是不可避免的。JavaScript是极其动态的。
:pray: 致谢
感谢所有在Github内外提交问题、提出建议,以及普遍帮助改进这个项目的人。特别感谢
- @vkbansal,在早期版本中提供了重要的早期反馈。
- @rainabba和@sullivanpt集成了Node v4支持。
- @s-h-a-d-o-w解决了长期存在的路径名中空格转义问题(#355)。
- ajyong在2021年底赞助了代码签名证书。