windows平台多版本nodejs共存工具nvm-windows 中文文档

2023-05-16

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
例如:image

权限(出口 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

image

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 请求的特殊终端,您可能会看到如下错误:image

“系统找不到指定的路径”

如果 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 安装如下所示:image

可以直接运行脚本,如下所示:image

换句话说,运行而不仅仅是 .C:\path\to\version\node.exe myscript.jsnode myscript.js

npm 也可以这样做:

image

您甚至可以通过这种方式运行 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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

windows平台多版本nodejs共存工具nvm-windows 中文文档 的相关文章

  • dpkg包管理

    dpkg info xxx deb grep Depends 查看包的依赖关系 dpkg c xxx deb 安装前根据deb文件查看 dpkg L debname 安装后根据包名查看 dpkg l grep debname 查看是否安装某
  • 单片机烧录程序后没反应

    勾选reset and run 或者烧录完之后重新上电
  • CDN缓存

    CDN缓存那些事 CDN是什么 xff1f 谈到CDN的作用 xff0c 可以用8年买火车票的经历来形象比喻 xff1a 8年前 xff0c 还没有火车票代售点一说 xff0c 12306 cn更是无从说起 那时候火车票还只能在火车站的售票
  • custoj 炉石传说真尼玛好玩 C++

    题目地址 xff1a http oj cust edu cn problem 76 题目 xff1a 描述 炉石传说 是一款快乐的卡牌类游戏 xff0c 其中有一张牌为 亵渎 xff0c 其效果如下 xff1a 对敌方随从全部造成1点伤害
  • CLion连接远程运行程序,包括c++和cuda编程

    点击 43 号增加远程服务器的设置 xff0c 并配置好右侧一栏服务器上的配置 Toolchian选择配置好的远程服务器 如果是cuda编程CMake options需要配置 xff1a DCMAKE CUDA COMPILER span
  • pi节点0.4.7 incoming connections一直为0的解决方案

    我开始也是这样 xff0c incoming connections一直是0 xff0c 连了这个IP xff0c 等了大概4 6天就好了 但是我目前也只有1个incoming connetions xff0c 后面有变化我再过来告诉下大家
  • visio2010最新密钥

    2V3PD 3YMPX FJG7R 4W49V M92KH 截止2011年6月22日16点 此KEY还有最后 110 次可激活 MKBGD BWJMW TJQR6 J8DH6 Q8M6B 截止2011年6月22日16点 此KEY还有最后 1
  • arm-linux-gcc安装过程及环境变量设置方法汇总

    一 xff1a 网上下载个压缩包 xff0c 我下载的是arm linux gcc 4 4 3 20100728 tar gz xff0c 地址 xff1a http arm9 net download asp 二 xff1a Fedora
  • XXapp产品过程思考:

    本人在团队中本为项目经理 xff0c 临时需求 xff0c 客串产品经理成为新鸟 xff0c 没吃过猪肉 xff0c 没见过猪跑 xff0c 完全自己想象猪该如何跑 xff0c 以下为本人在研发这款app的一点心得 xff0c 仅供大家参考
  • AttributeError: module ‘pymunk‘ has no attribute ‘constraint‘ 解决方案

    问题分析 出现这个问题是因为当前版本的pymunk的版本过高所致 xff08 我的版本是6 4 0 xff09 xff0c 换用更低版本的pymunk即可 解决方案 pip install pymunk 61 61 5 5 0 参考链接 P
  • linux 网络 device not managed 上不了网

    Ubuntu 12 04 xff0c 本来无线网络连接好好的 xff0c 但是在重启了一次unity界面之后 xff0c 网络连接那个地方就一直显示一个扇形 xff0c 点开后的下拉列表里面一个无线网络都看不见 xff0c 发现 34 Wi
  • 开发板不能下载内核 内核下载问题解答

    首先出现 1 39 serverip 39 not set 这时在 uboot gt setenv serverip 192 168 1 103 这是我虚拟机的ip xff0c 大家对应设置即可 2 ERROR 96 ipaddr 39 n
  • 2013 吊水壶瀑布 长春 周边 旅游 攻略 双阳

    话说没车想去长春大的吊水壶时间很苦逼的事情 xff0c 一下为本人历经千辛万苦总结的去吊水壶的攻略 xff0c 绝对在网上独一无二 xff0c 而且不是自驾游 楼主全靠乘车问路 xff0c 不信有人会比我的攻略更省rmb啦 xff0c 下面
  • javaScript、PHP连接外卖小票机打印机方案(佳博、芯烨等)

    前言 xff1a 目前开发需要用到电脑直接连接外卖小票机打印小票 xff0c 查阅各种资料 xff0c 终于解决了这个问题 效果 xff1a PHP JavaScript直接连接小票机并且自动出票 支持的小票机 xff1a 目前测试可以的有
  • adb 操作指令详解

    ADB xff0c 即 Android Debug Bridge xff0c 它是 Android 开发 测试人员不可替代的强大工具 xff0c 也是 Android 设备玩家的好玩具 注 xff1a 有部分命令的支持情况可能与 Andro
  • typeAliases用法简介

    1 作为别名使用 在mybatis config xml中对Books类取别名 xff1a lt typeAliases gt lt typeAlias alias 61 34 Books 34 type 61 34 com niu poj
  • 获取文件的contentType

    获取文件类型 64 param fileName 文件名 64 return public static String getContentType String fileName Optional lt MediaType gt medi
  • PCL vtkAtomic.h(358): error C2872: “detail”: 不明确的符号

    错误 xff1a 严重性 代码 说明 项目 文件 行 禁止显示状态 错误 C2872 detail 不明确的符号 TestCarModel d softwareinstallpath pcl1 8 1 3rdparty vtk includ
  • You must set CMAKE_CUDA_ARCHITECTURES to e.g. ‘native’, ‘all-major’, ‘70’

    colmap 编译报错 CMake Error at CMakeLists txt 255 span class token punctuation span message span class token punctuation spa
  • 基于Open3D的点云处理2-Open3D的IO与数据转换

    三维数据类型 点云 某个坐标系下的点数据集 xff0c 每个点包括三维坐标X xff0c Y xff0c Z 颜色 分类值 强度值 时间等信息 xff1b 储存格式 xff1a pts LAS PCD xyz asc ply等 xff1b

随机推荐