volta教程 下载安装使用

发布时间:2026/10/4 11:35:45
volta教程 下载安装使用 文章目录什么是Volta下载volta注意安装过node.js的一定要先卸载不然会有路径冲突等问题VOLTA_HOME对应的目录要是非管理员目录设置 系统环境变量VOLTA_HOMED:\DevTools\volta官方推荐msi安装包volat -v 查看有没有成功命令install项目固定版本pinVolta 是 目录级别生效查看版本与切换卸载node或工具手动下载node包让volta管理全局安装 局部安装npm缓存nvm注意安装过node.js的一定要先卸载不然会有路径冲突等问题安装页面的路径不要选择需要管理员权限的目录在用户可写目录这样就完全不用管理员权限打开cmdnvm下的全局安装.npmrc 配置文件中prefix 和 cache决定了 npm 如何存放全局工具和下载过的包资源局部安装/全局安装npm install 给当前项目装依赖默认装进当前项目根目录的 node_modules自己下载了nodejs的压缩包怎么让nvm管理Node 通常自带 npm但 npm 可以独立升级nvm 主要围绕 Node 管理 npmVolta 则能更明确地把 Node 和 npm 分开管理什么是Volta下载volta注意安装过node.js的一定要先卸载不然会有路径冲突等问题VOLTA_HOME对应的目录要是非管理员目录设置 系统环境变量VOLTA_HOMED:\DevTools\volta官方推荐msi安装包再用 MSI 安装 → 这时 Volta 会自动用 D 盘路径Volta Windows Installer下载 .msi 文件后直接双击安装volat -v 查看有没有成功命令install项目固定版本pin只在该项目生效Volta 是 目录级别生效查看版本与切换卸载node或工具手动下载node包让volta管理没试过不知道可行不这里有手动的教程全局安装 局部安装VOLTA_HOME 是 Volta 统一存放所有运行环境、全局工具和代理快捷方式的物理根目录默认在 ~/.volta 或C:\Users用户名\AppData\Local\Volta VOLTA_HOME Volta 的总仓库包含所有 Node镜像、下载缓存和统一的 $VOLTA_HOME/bin 出口在 Volta 的设计规范里volta install 专门用来安装全局工具和配置全局环境而安装到项目局部必须回归使用包管理器本身如npm / pnpm / yarn Volta 从设计上就明确划分了职责边界全局层Global Tools Runtimes→ \rightarrow→归 volta 管volta install node20→ \rightarrow→设置全局默认 Node版本volta install typescript→ \rightarrow→全局安装 CLI 工具任何地方都能敲tsc项目局部层Project Dependencies→ \rightarrow→归 npm / pnpm / yarn 管npminstall express→ \rightarrow→安装项目生产依赖写入 package.json 的dependenciesnpm install -D typescript→ \rightarrow→安装项目开发依赖写入devDependencies位于局部的 ./node_modules 当你敲下 npm install 时Volta 的代理机制会感知当前项目 package.json 里的 “volta” 锁定的 Node/npm 版本。它会自动切换到那个版本的 npm 引擎去执行安装。包会被精准安装在当前项目的 ./node_modules 目录下绝不会跑到全局的 VOLTA_HOME 里。如果你想为当前项目指定/锁定使用哪一个 Node 或 npm 版本不要用 volta install而是用 volta pin#锁定当前项目使用 Node 20.19.6 volta pin node20.19.6 # 锁定当前项目使用 npm 10.8.2 volta pin npm10.8.2在普通环境或 NVM 中我们习惯敲 npm install -g typescript。但在 Volta 体系下强烈推荐使用 voltainstall typescript 如果你用 npm install -g 它是由 当前激活的那个 npm 去执行安装的。全局工具会强行绑定在“你当前使用的 Node 版本”目录下。Node.js 和 npm 在物理上是强绑定的当你下载任何一个版本的 Node.js比如 Node v20.19.6时官方安装包里自带了一个特定版本的 npm比如 npm v10.8.2。Volta 的工作原理是把官方的 Node.js 压缩包下载下来原封不动地解压到 $VOLTA_HOME/tools/image/node/20.19.6/ 这个镜像文件夹里。只要你运行原生 npm 命令npm 默认的行为逻辑就是把全局包写进它自己所在的那套 Node 版本的根目录下致命痛点当你切换到另一个项目的 Node 版本时之前 npm -g安装的工具可能会因为底层 Node 版本不兼容而报错或者直接“找不到命令”。 在 Volta 环境下如果你执行了传统的 npminstall -g 这个包会被安装到 Volta 为当前 Node 版本所构建的私有镜像目录ImageDirectory中物理路径 $VOLTA_HOME/tools/image/node/当前Node版本/node_modules \text{物理路径} \text{\$VOLTA\_HOME/tools/image/node/当前Node版本/node\_modules}物理路径$VOLTA_HOME/tools/image/node/当前Node版本/node_modules当前 Node 是 v20.19.6 ── 你敲 npm install -g typescript└─ 物理装到了: VOLTA_HOME/tools/image/node/20.19.6/…切换到项目 A (指定 Node v18) ── 敲 tsc 运行└─ 报错或找不到 tsc失效原理作用域死锁用 npm -g 安装的包其物理源码和可执行脚本强行绑私在了 Node v20.19.6 的镜像文件夹内。代理断链Volta 的 Shim 垫片位于 $VOLTA_HOME/bin根本不知道你通过 npm -g 偷偷装了个新工具因此它不会在 $VOLTA_HOME/bin 目录下为你创建全域代理快捷方式。当你切到别的 Node 版本或离开当前会话时系统就彻底找不到这个命令了如果你敲的是 npm install -g typescript干活的主体是 npm。npm 只是 Node.js 自带的一个普通脚本。当它执行 -g 时它会遵循它诞生第一天起就写死的底层逻辑“把我收到的包扔到我现在这个 Node 版本的 node_modules 文件夹里。”此时 Volta 只是在旁边看着并没有干涉 npm 的内部行为。所以这个包被 npm 强行锁死在了当前 Node 版本的物理镜像内部如果你敲的是 volta install typescript干活的主体变成了 Volta 引擎本身Rust 编写的系统级程序。Volta 会拦截这次安装请求它会绕过 npm 的默认全局路径做两件黑科技事情独立抽离把 typescript 的源码下载并存放在一个独立的文件夹中例如V O L T A H O M E / t o o l s / i m a g e / p a c k a g e s / t y p e s c r i p t 不和任何特定的 N o d e 版本混住。注入全域代理 S h i m 在系统的 P A T H 目录 VOLTA_HOME/tools/image/packages/typescript不和任何特定的 Node 版本混住。 注入全域代理Shim在系统的 PATH 目录VOLTAH​OME/tools/image/packages/typescript不和任何特定的Node版本混住。注入全域代理Shim在系统的PATH目录VOLTA_HOME/bin下生成一个名为 tsc 的代理小文件npm缓存Volta → 决定“这次用哪个 npm 版本”npm → 自己读取 npm 配置 → 决定 cache 在哪里npm config get cache → 查询“当前这个 npm 最终解析出来的 cache”npm 缓存通常可以被不同 Node/npm 版本共用Volta 或 nvm 只是决定“现在运行哪个 Node/npm”缓存目录本身是 npm 自己的。不同 npm 版本共用同一个 cache 没问题nvmnvm管理node.js版本的工具由于下载node.js时会自动下载npm所以间接管理了npm注意安装过node.js的一定要先卸载不然会有路径冲突等问题https://blog.csdn.net/weixin_57844432/article/details/127788884使用 3https://github.com/coreybutler/nvm-windows/releases 地址下载xx.zip变量作用NVM_HOMEnvm 的根目录存放 nvm.exe 和管理文件。比如你以后卸载 nvm 就看这个文件夹。NVM_SYMLINKNode.js 的“实际使用目录”也就是node.exe放在哪。nvm 切换 Node 版本时会通过这个目录来更新 PATH 指向的 Node。安装时nvm 会自动把这两个目录加到 环境变量 PATH 中,并且自动设置NVM_HOMENVM_SYMLINK2个键值对的环境变量所以你在 PowerShell / CMD 中输入 node 就能识别。安装页面的路径不要选择需要管理员权限的目录在用户可写目录这样就完全不用管理员权限打开cmdNVM_HOME的路径就是2)对应的可以设置为D:Soft\NVM\nvmNVM_SYMLINK的路径就是3)对应的可以设置位D:Soft\NVM\nvm\nodejsD盘下的program files也不行nvm下的全局安装在 nvm 下“全局安装”并不是全系统的而是“当前 Node 版本的全局”即“全局安装是『每个 Node 版本一份』”在 nvm 中“全局安装”只对当前 Node 版本有效切 Node 换一套全局工具.npmrc 配置文件中prefix 和 cache决定了 npm 如何存放全局工具和下载过的包资源npm 的配置文件.npmrc分为两个层级项目级当前项目根目录下的 .npmrc。用户全局级位于你用户主目录下的文件Windows 在 C:\Users用户名.npmrcLinux/macOS 在~/.npmrc。在 NVM 环境下如果不手动修改 prefix它的默认路径直接挂载在各自 Node 版本安装根目录的子路径下。当你切换 Node 版本时npm config get prefix 会随着当前激活的版本动态改变当你执行npm install -g package时npm 实际上在后台分两步写入文件这两步分别用到了这两个路径写源码把该工具的源码和依赖下载并解压到npm root -g对应的文件夹中即 node_modules。生成快捷可执行命令在prefix根目录下生成可执行脚本/软链接Windows 下是 .cmd / .ps1 文件Linux/macOS 下是 bin/ 目录里的 symlink这样你才能在终端里直接敲命令运行它prefix 是根目录npm root -g 是放包的 node_modules 文件夹。prefix 是全局环境的根目录而 npm root -g 是这个根目录里专门用来存放全局代码包的文件夹系统要在终端里执行命令行工具时去 prefix 找PATH 对应的目录。Node.js 要加载包的源码时去 npm root -g 找。prefix 目录或其下的 bin 目录必须被包含在系统的 PATH 环境变量中全局安装的 CLI 命令才能在终端里直接敲出来下面的配置直接写入用户全局级的 .npmrc 文件中。npm config set prefix D:\npm-globalnpm config set cache D:\npm-cache因为这个 .npmrc 文件对你电脑上的所有 Node 版本是共享的所以无论你切换到 Node 18、Node 20 还是 Node 22npm 都会去读取同一个 .npmrc强制把所有 npm install -g 的包全部下载到你指定的目录里cache 共用通常没什么问题npm 的默认缓存本来就是用户级的%LocalAppData%\npm-cache也就是说不同 Node/npm 版本本来就常常共用一个缓存目录。你改成D:\npm-cache也是很正常的但 prefix 共用要谨慎prefix 决定npm install -g xxx把“全局包”装到哪里。npm 官方说明全局安装就是装到 prefix 对应的位置如果你设prefixD:\npm-global那么多个 Node 版本就都会看到同一个全局 npm 工具目录Node 20 ─┐Node 22 ─┼→ D:\npm-globalNode 24 ─┘这在技术上能做到但 nvm-windows 官方并不推荐把不同 Node 版本的全局模块强行共用因为某些全局包依赖特定 Node 版本带 native module不同 Node ABI 不兼容一个 Node 版本升级包后可能导致旧 Node 不能用了nvm-windows 官方说明默认情况下不同 Node 版本的 global npm modules 就是不共享的并且维护者也明确说“没有一种可靠的方式可以让不同 Node 版本安全共用所有global modules”。所以我建议你这样分cache→ 可以统一放 D:\npm-cache→ 推荐prefix→ 可以统一放 D:\npm-global→ 但如果你经常切换跨度较大的 Node 版本要谨慎另外修改 prefix 后别忘了把D:\npm-global加入 Windows 的 PATH否则你虽然安装成功了直接输入xxxWindows 可能找不到这个命令。npm 官方的 Windows 文档也特别提醒了 prefix 和 PATH 要对应。NVM 默认不会按 Node 版本隔离缓存所有版本的 npm 和 npx 均共享同一个系统全局缓存目录。npm config get prefixnpm config get cache操作全局安装路径 (prefix)缓存路径 (cache)查看npm config get prefixnpm config get cache设置npm config set prefix “自定义路径”npm config set cache “自定义路径”prefix 和 cache 是两个非常核心的路径设置它们决定了 npm 如何存放全局工具和下载过的包资源npm 缓存通常可以被不同 Node/npm 版本共用Volta 或 nvm 只是决定“现在运行哪个 Node/npm”缓存目录本身是 npm 自己的。不同 npm 版本共用同一个 cache 没问题局部安装/全局安装当你在 PowerShell 或终端里直接敲一个命令例如 tsc时操作系统只会在系统的全局环境变量 PATH所包含的目录里去找这个可执行文件。全局安装-g时npm 会把可执行脚本直接塞进系统的 PATH 目录里所以操作系统能直接认出 tsc。局部安装时可执行脚本被放在你当前项目的 ./node_modules/.bin/ 目录下。系统的 PATH默认是不包含你当前项目的文件夹的所以操作系统会直接报错tsc : 无法将“tsc”项识别为 cmdlet、函数、脚本文件或可运行程序的名称…npm install 给当前项目装依赖默认装进当前项目根目录的 node_modulesnpm install 就是装到当前项目根目录的 node_modules 里自己下载了nodejs的压缩包怎么让nvm管理把对应的.zip压缩包放到NVM_HOME对应的目录下解压然后把文件夹的名字改成v版本号此时nvm list就可以看到这个版本了Node 通常自带 npm但 npm 可以独立升级nvm 主要围绕 Node 管理 npmVolta 则能更明确地把 Node 和 npm 分开管理nvm → 核心是管理 Node 版本 → npm 通常跟着每个 Node 安装 → 但当前 Node 的 npm 可以单独升级而 Volta → 明确把 Node、npm、Yarn 等都作为 tool 管理 → Node 和 npm 可以分别选择版本 而且Volta 还有一个很能说明这个关系的参数 volta run --bundled-npm … 意思是 不用我另外选择的npm强制使用这个 Node 原本捆绑的 npmNode.js 是运行 JavaScript 的程序npm 是安装 JavaScript 包的工具。安装 Node.js时通常会顺便带一个 npm所以看起来它们像绑定在一起但其实 npm 可以单独升级。nvm 主要用来切换不同 Node 版本因此 npm往往跟着对应的 Node 一起变化Volta 则可以更明确地分别管理 Node 和 npm 的版本。Node.js 运行 JavaScriptnpm 安装/管理包Node 安装包 通常顺便带一个 npmnvm 主要切 Node 版本Volta 可以分别管 Node 和 npmnpm cache npm 自己的缓存 npm config get cache