windows平台多版本nodejs共存工具nvm-windows 中文文档
2023年4月14日11:11:49
官网地址:https://github.com/coreybutler/nvm-windows
下载地址:https://github.com/coreybutler/nvm-windows/releases
nodejs版本列表 https://nodejs.org/en/download/releases
PS C:\Users\pc\Desktop> nvm -h
Running version 1.1.11.
Usage:
nvm arch : 显示nodejs是在 32 位还是 64 位模式下运行.
nvm current : 显示激活版本.
nvm debug : 检查 NVM4W 进程是否存在已知问题(疑难解答).
nvm install <version> [arch] : 版本可以是特定版本,“最新”表示当前最新版本,“lts”表示
最新的 LTS 版本。(可选)指定是安装 32 位还是 64 位版本(默认值
到系统架构)。将 [arch] 设置为“全部”以安装 32 位和 64 位版本。
将 --insecure 添加到此命令的末尾以绕过远程下载服务器的 SSL 验证.
nvm list [available] : 列出节点.js安装。在末尾键入“available”以查看可以安装的内容。别名为 ls
nvm on : 启用node.js版本管理
nvm off : 禁用node.js版本管理.
nvm proxy [url] : 设置用于下载的代理。将 [url] 留空以查看当前代理。
将 [url] 设置为“none”以删除代理.
nvm node_mirror [url] : 设置node镜像。默认值为 https://nodejs.org/dist/。将 [url] 留空以使用默认网址。
nvm npm_mirror [url] : 设置 npm 镜像。默认值为 https://github.com/npm/cli/archive/。将 [url] 留空为默认网址。
nvm uninstall <version> : 版本必须是特定版本.
nvm use [version] [arch] : 切换到使用指定的版本。(可选)使用“最新”、“lts”或“最新”。
“最新”是最新安装的版本。(可选)指定 32/64 位体系结构。
NVM 使用<arch>将继续使用所选版本,但切换到 32/64 位模式。
nvm root [path] : 设置 nvm 应存储不同版本的 node.js 的目录。
<path> 如果未设置,将显示当前根目录.
nvm [--]version : 显示适用于 Windows 的 nvm 的当前运行版本。别名为 v.
使用方法:
下载nvm-setup.exe,安装之后会自动加入环境变量
查询版本
nvm -v
查看安装的版本
nvm list
nvm ls
查看可用nodejs版本
nvm list available
安装指定版本的nodejs
nvm install 12.22.12
卸载指定版本nodejs
nvm uninstall 12.22.12
使用指定版本nodejs
nvm use 12.22.12
查看当前版本nodejs
nvm current
设置nodejs镜像
nvm node_mirror https://npmmirror.com/mirrors/node/
设置npm镜像
nvm npm_mirror https://npmmirror.com/mirrors/npm/
安装yarn
npm install -g yarn
常规使用问题
NVM4W 1.1.11 引入了该命令。如果NVM4W检测到任何问题,它将显示它们。nvm debug
例如:
权限(出口 1、出口 5、拒绝访问、出口 145)
根据大众需求,NVM4W 1.1.8引入了对开发人员模式的支持。换句话说,如果没有明确必要,则不会收到提升权限的 UAC 提示。如果您希望系统提示您输入 UAC 权限,请使用 NVM4W 1.1.7。
如果不使用适当的权限运行 nvm.exe 文件,则可能会收到 、 或错误。这些直接来自 Windows,表示用户帐户无权执行您尝试执行的操作。exit 1exit 5Access Denied
最常见的权限问题与创建符号链接有关。NVM4W 使用符号链接(在 中使用)将节点安装路径重定向到相应的安装。Windows 需要提升的管理权限才能创建符号链接,但开发人员模式放宽了这些限制。mklinknvm use
最好在 Windows 10 上启用开发人员模式,这将授予你的用户帐户略微提升的权限。了解如何启用设备进行开发
启用开发人员模式
第二个最常见的权限问题是尝试使用受保护的目录来存储 Node 安装。Windows 需要管理权限才能写入 。许多用户希望将不同版本的 Node 安装到此目录,但这会强制 NVM4W 创建下载(写入)节点/npm 到受保护的目录。通常,将 Node 安装存储在备用目录(如 )或其他驱动器(如 )中会更简单。C:\Program FilesC:\nvm4wd:\nodejs
有几个人抱怨受保护的目录,对不起...但我不是那个可以谈论这个问题的人。最好的办法是联系微软,因为这是操作系统的要求。每个程序都必须处理这个问题。请记住,NVM4W 基本上是一个安装程序,因此它需要类似安装程序的权限。
第三个最常见的权限问题是权限冲突。许多用户在安装 NVM4W 之前无法卸载旧版本的 Node。适用于 Windows 安装程序的 NVM 尝试将现有节点安装迁移到 NVM4W,但旧安装可能会阻止这种情况。原始节点安装通常使用不同的用户权限安装,使 NVM4W 无法卸载它。这会导致 Node 的两个安装冲突。节点可以物理存在于多个位置,但一次只能使用一个无作用域(即全局可用)版本。这就是为什么自述文件建议在安装 NVM4W 之前卸载以前版本的 Node。
退出 145 或“进程无法访问该文件,因为它正被另一个进程使用。
出口 145:目录不为空,出口 32:进程无法访问该文件,因为它正被另一个进程使用。 错误是从Windows本身传递的。这些错误是不言自明的。大多数用户遇到其中一个,因为他们尝试从 Node 安装的目录中更改 Node.js 版本。例如,如果您的根目录是并且您安装了节点 16.9.1,它将在 上可用。如果您在终端/powershell 中导航到或在 Windows 资源管理器中保持打开状态,Windows 将锁定该目录(因为它已打开)。如果您尝试运行(另一个版本的 Node),它将无法删除原始符号链接,因为它已被锁定。绕过这一点的最简单方法是导航到另一个目录(即 运行前)。C:\nvm4wC:\nvm4w\v16.9.1C:\nvm4w\v16.9.1nvm use 16.11.0cd C:\nvm use x.x.x
活动节点进程也可能导致这些问题。如果在尝试新版本时正在运行活动进程,它将失败。例如,如果运行 ,则会创建一个实时进程(使用 node.exe)。如果您尝试在不关闭服务器的情况下切换版本,Windows 将警告您节点.exe进程当前正在使用中。这有点像说“您无法在使用它时卸载它”。nvm usenode mywebserver.js
防毒
某些版本(特别是 1.1.8 和 nvm-update.exe)没有代码签名。某些防病毒服务使用机器学习算法来确定对未签名可执行文件的威胁。如果您的防病毒软件识别出名称为 、 或 的威胁,则表示机器学习算法正在对应用程序进行猜测。这些与已知的病毒签名不同。NVM4W 没有恶意代码,但版本 1.1.8 未进行代码签名。有关详细信息,请参阅该部分下的发行说明。!mlML.MLWARNING
在不确定数量的安装后,Microsoft Defender 和 Microsoft SmartScreen 将信任该应用程序。然而;没有办法知道这个数字是多少。您可能需要在 NVM4W 的防病毒软件中破例。
创建 Windows Defender 排除项
如果无法下载版本,则可能需要暂时禁用实时保护。永远记得在下载完成后重新打开它!
禁用Windows Defender RealTime
请注意,运行 nvm-update.exe 将下载 nvm-setup.zip,然后提取所有相关文件以更新您的安装和清理。在执行此操作时,您可能需要暂时禁用Windows Defender实时保护。
路径名/安装根目录中的空格
此问题应从版本 1.1.8 开始解决。
如果您使用的是旧版本...
有些环境没有注意到太空逃逸。如果您在使用 Windows 识别 NVM4W 时遇到问题,请尝试将其安装在没有空格的路径上,例如 .同样的情况也与符号链接路径相关,因此您可能希望使用符号链接根目录以外的其他内容。C:\nvmC:\Program Files\nodejs
在安装 NVM4W 之前卸载现有节点安装
如果您不确定是否受此影响,请尝试使用路径查找器故障排除实用程序。
安装程序会尝试为您接管 Node 的任何现有安装,但该过程可能比看起来更复杂。最常见的问题来源是当用户使用与用于安装以前版本的帐户不同的帐户或具有不同权限来安装 NVM4W 时。最重要的是,安装/卸载应用程序的权限非常严格,NVM4W可能无法吸收以前的安装。
最好的做法是在安装 NVM4W 之前卸载以前版本的 Node。在某些情况下,您可以在之后卸载以前的版本,但我一直认为它工作的唯一可靠方法是在安装 NVM4W 之前删除以前的版本。
根据你拥有的 Windows 版本以及桌面的设置方式,修改注册表中无法控制的应用程序的路径、与现有应用关联的用户帐户、漫游配置文件等可能会出现问题。
我只有几个版本的Windows要测试,但它远非完整的Microsoft Windows目录。同样,似乎始终有效的一致解决方案是在安装 NVM4W 之前卸载 Node。
为什么我需要卸载 Node.js 在安装 NVM for Windows 之前?
安装 NVM for Windows 时,它会将 添加到环境变量中。指向操作系统将在其中查找文件的目录。Windows 扫描条目,查找 ,当达到该值时,它将找到该条目。下面是一个示例:NVM_SYMLINKPATHNVM_SYMLINKnode.exePATHnode.exeNVM_SYMLINKPATH
Windows 逐个扫描每个目录,直到找到 ,从 开始。它不会在那里找到,所以它会继续前进,依此类推,直到找到(在 中)。node.exeC:\Users\corey\go\binnode.exeC:\Users\corey\AppData\Local\GithubDesktop\binnode.exeNVM_SYMLINK
如果在安装 NVM4W 之前已经安装了 Node.js.js,则在 .这样做的结果是 每当您运行时,它都会找到以前安装的版本,而不是NVM4W安装的版本。NVM_SYMLINKPATHnode myscript.js
NVM4W 安装程序有一个选项,尝试将旧的 Node.js 版本移动到它可以管理的目录中,但有时这是不可能的。有时 Windows 不允许这样做,因为其他用户添加了原始 Node.js 安装,或者当前用户无权从 NVM4W 安装过程中更改注册表。有时,移动/卸载 Node.js 的唯一方法是使用其专用的卸载程序。这就是为什么我们建议在安装 NVM4W 之前卸载 Node.js。
无法安装 npm?
一些用户报告了安装随 npm 6.14.7 一起提供的 Node.js 版本时出现问题,例如 Node 14.19.x(使用 npm 14.19.1 的 6.14.16 除外)。npm 下载存在上游问题。有关详细信息,请参阅问题 #799。
确保您使用的是适用于 Windows 1.1.7 或更高版本的 NVM。旧版本的NVM4W使用旧的npm github存储库(只有旧版本)。
一些用户尝试安装旧版本的 npm 进行测试。请注意,较新版本的 npm 不一定适用于旧版本的 Node.js。旧版本的 npm 不一定适用于较新版本的 Node.js。NVM4W 不管理 npm,它只是安装它。开发人员有责任确保他们使用的 Node/npm 版本是兼容的。
升级 npm
某些用户遇到以下错误:
npm ERR! path C:\Program Files\nodejs\npm.cmd npm ERR! code EEXIST npm ERR! Refusing to delete C:\Program Files\nodejs\npm.cmd: is outside C:\Program Files\nodejs\node_modules\npm and not a link npm ERR! File exists: C:\Program Files\nodejs\npm.cmd npm ERR! Move it away, and try again.
最好的办法是使用此解决方案,https://github.com/felixrieseberg/npm-windows-upgrade
某些旧版本的 npm 具有硬编码路径,可防止自动删除。一些用户已经找到了有效的手动解决方法。
如何在 nvm-windows 中使用 yarn?
Yarn 是一个 npm 包。 将安装它。请记住,yarn 并没有随 Node.js 正式发布,因此每次新安装 Node.js 都需要重复此操作。npm install -g yarn
特殊端子外壳
根据问题 #417,某些 shell 不遵守 UAC 提示(即请求管理员权限)。适用于Windows的NVM无法控制终端的工作方式,并且由于可用的自定义终端(mingw,cmder,ConEmu,cygwin,hyper等)的数量之多,仅支持官方Windows终端(CMD和PowerShell)。Bash对Windows的支持可能会在未来推出。
如果您使用的是不遵守 UAC 请求的特殊终端,您可能会看到如下错误:
“系统找不到指定的路径”
如果 Windows 找不到 NVM,请先尝试重新启动终端/电源外壳。如果问题仍然存在,则可能是由于终端配置错误。请参阅此堆栈溢出答案以获取可能的修复方法。
延迟更改
无论何时调用,适用于 Windows 的 NVM 都会更新指向安装根目录的符号链接。这在操作系统上可能需要几毫秒,这意味着更改不会立即可用。一些用户在 CI 环境中遇到了以下代码的问题:nvm use x.x.xx.x.x
nvm use lts
npm i -g yarn
在某些(不是全部)环境中,后台进程在执行命令之前尚未完成,从而导致命令失败。如果遇到此问题,请添加轻微延迟:nvm use ltsnpm i -g yarn
nvm use lts
start-sleep -seconds 1
npm i -g yarn
为什么不支持 .nvmrc?为什么不支持某些适用于 macOS/Linux 的 nvm 功能?
该文件是 nvm 项目的一部分的概念。这个项目一直与原始的 nvm 项目不同。这个项目并不努力成为原始 nvm 项目的镜像。.nvmrc
不支持文件的主要原因是由于设计理念的关键差异。nvm 项目使用填充程序来访问 Node.js,而此项目则不使用。.nvmrc
填充程序是将命令中继到另一个可执行文件的可执行文件/命令。填充码可以重建命令,其中包括读取配置文件(即 ,然后使用 nvmrc 指定的 Node 版本的路径构造命令。.nvmrc
从历史上看,填充程序会导致 Windows 系统上的边缘情况。它通常被认为是不可靠的。最常见的问题是无法将用户和目录上下文直接中继到其他可执行文件。例如,识别填充程序的当前工作目录而不是 Node 可执行文件,或者填充程序的所有者将与执行脚本的用户不同。它需要一些脚本知道它们在填充程序的上下文中运行,而不是直接使用 Node.js。请参阅版本管理工作组中的边缘情况。底线是调用垫片与调用 .node.exe
Windows 的 NVM 旨在直接使用 Node.js 可执行文件。这就是使用符号链接而不是填充程序的原因。从哲学上讲,它与在没有版本管理器的情况下使用 Node(或任何运行时)的方式一致。
关于作者意图的说明:
尽管此项目的名称与早期项目相似,但它们并不相同。我无意添加支持或镜像 nvm 的一举一动(也无意相反)。.nvmrc
长期以来,人们对版本管理工具及其应该做什么一直存在混淆。曾尝试调整版本管理的目标,但最终失败了,导致没有官方标准。随着新的 JavaScript 运行时(如 Deno)和文化的引入,我相信这种努力超越了不止一个治理组。
的流行表明人们希望实现更自动化的运行时/环境管理。我自己也有这种感觉。然而;此项目的范围始终是版本管理,而不是运行时或环境管理。不过,我花了相当多的时间思考这些概念。我相信运行时管理是一个有效的社区需求/愿望,但我也觉得 .nvmrc 概念只解决了其中的一小部分。.nvmrc
我没有打破这个项目的设计范围,而是选择开发一个后续项目:运行时。这是在rt上首次宣布的,在“该项目的未来”部分中进行了描述。通过利用从这个项目中学到的经验教训(很多),我们可以更好地为所有用户(而不仅仅是 Windows 用户)构建更好/统一的整体解决方案。
如何同时使用两个不同版本的 Node.js?
NVM4W 并非旨在同时管理多个版本的 Node.js,但仍然可以同时运行多个版本。如果需要同时运行多个版本的 Node,请使用所需版本的绝对路径。例如,如果您的 NVM4W 安装如下所示:
可以直接运行脚本,如下所示:
换句话说,运行而不仅仅是 .C:\path\to\version\node.exe myscript.jsnode myscript.js
npm 也可以这样做:
您甚至可以通过这种方式运行 npm 命令。例如,你的package.json可能看起来像这样:
{
"name": "tmp",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"dev": "echo \"running script from package.json...\""
},
"author": "",
"license": "ISC",
"dependencies": {
"porthog": "^1.0.1"
}
}
运行该命令将如下所示:dev
图像
为什么我得到“npm 无法识别”
新安装后,如果无法识别 npm,通常归因于以下原因之一:
未安装节点(即 )。nvm install
用于安装 Node 的用户帐户没有正确安装它的权限(请参阅权限)。
用户在安装 Windows 版 NVM 之前未删除旧的 Node.js 安装。
代理或网络连接错误阻止了 npm 的下载。
用户尝试安装带有(不受支持的外壳)的 Node 版本,例如 Cygwin
QQ二群 166427999
博客文件如果不能下载请进群下载
如果公司项目有技术瓶颈问题,请联系↓↓
如果需要定制系统开发服务,请联系↓↓
技术服务QQ: 903464207