侧边栏壁纸
博主头像
ZDREAM - Thassarian 的个人技术博客

对抗变化的方法唯有拥抱变化。

  • 累计撰写 35 篇文章
  • 累计创建 3 个标签
  • 累计收到 1 条评论

目 录CONTENT

文章目录

FNM:解决同一台电脑中需要不同版本node.js的问题

Thassarian
2023-08-21 / 0 评论 / 0 点赞 / 4 阅读 / 0 字

Fast Node Manager(Node.js 版本管理工具)

由 Rust 开发,支持跨平台(macOSWindowsLinux),通过官方二进制文件安装 Node.js 版本,可快速切换不同项目所需的 Node 版本。安装方式包括使用 WingetWindows 包管理器)或下载fnm 压缩包后配置环境变量。 ‌

之前需要维护两个不同的项目,一个是需要用到 node 14 的 Vue2 项目,另一个是 node 16 的 Vue3 项目,需要通过工具切换 node 版本。

以下均为windows环境下powershell的命令。

下载和解压

fnm页面:Releases · Schniz/fnm

下载版本:fnm-windows.zip

 #下载fnm
 Invoke-WebRequest -Uri "https://github.com/Schniz/fnm/releases/download/v1.38.1/fnm-windows.zip" -OutFile "fnm-windows.zip"
 ​
 # 定义 fnm 的安装目录
 $fnmInstallDir = "D:\fnm"
 ​
 # 创建目录 (如果不存在)
 New-Item -ItemType Directory -Path $fnmInstallDir -Force
 ​
 # 解压下载的 zip 文件到安装目录
 Expand-Archive -Path "fnm-windows.zip" -DestinationPath $fnmInstallDir -Force
 Write-Host "fnm 已解压到 $fnmInstallDir"
 ​
 # 检查 fnm.exe 是否存在
 Get-ChildItem -Path $fnmInstallDir\fnm.exe

设置fnm.exe的环境变量

 # 获取当前的 User PATH
 $currentUserPath = [System.Environment]::GetEnvironmentVariable('Path', 'User')
 ​
 # 检查 fnm 的路径是否已在 User PATH 中
 if (-not ($currentUserPath -split ';' -contains $fnmInstallDir)) {
     # 如果不在,则追加路径 (用分号分隔)
     $newPath = $currentUserPath + ";" + $fnmInstallDir
     # 设置永久的 User PATH (注意:这会修改你的系统设置)
     [System.Environment]::SetEnvironmentVariable('Path', $newPath, 'User')
     Write-Host "'$fnmInstallDir' 已添加到你的永久 User PATH。"
     Write-Host "你需要 **重启** PowerShell 或 CMD 窗口 (或者重启电脑) 才能让这个更改完全生效。"
 ​
     # 同时更新当前 PowerShell 会话的 PATH,以便立即使用 fnm
     $env:Path += ";$fnmInstallDir"
      Write-Host "PATH 已为当前会话更新。"
 ​
 } else {
     Write-Host "'$fnmInstallDir' 已经在你的永久 User PATH 中了。"
      # 如果需要,也确保当前会话包含它
      if (-not ($env:Path -split ';' -contains $fnmInstallDir)) {
          $env:Path += ";$fnmInstallDir"
          Write-Host "PATH 已为当前会话更新。"
      }
 }

配置 PowerShell 以使用 fnm

 # 确保 PowerShell 配置文件存在
 if (-not (Test-Path $PROFILE)) {
     New-Item -Path $PROFILE -ItemType File -Force
 }
 ​
 # 定义要添加到配置文件的命令
 $fnmInitCommand = 'fnm env --shell powershell | Invoke-Expression'
 ​
 # 检查是否已存在
 $profileContent = Get-Content $PROFILE -Raw
 if (-not ($profileContent -like "*fnm env --shell powershell*")) {
     # 添加 fnm 初始化命令到配置文件末尾
     Add-Content -Path $PROFILE -Value "`n# FNM initialization`n$fnmInitCommand"
     Write-Host "fnm 初始化命令已添加到你的 PowerShell 配置文件 ($PROFILE)."
     Write-Host "请执行下面的命令来在当前会话中激活 fnm,或者重启 PowerShell:"
     Write-Host $fnmInitCommand
 } else {
     Write-Host "fnm 初始化命令已在你的 PowerShell 配置文件中找到。"
 }
 ​
 # 在当前会话中立即执行初始化 (这样你就可以马上使用 fnm 了)
 Invoke-Expression -Command $fnmInitCommand

使用fnm

 #验证安装(可能需要重启 PowerShell)
 fnm --version
 ​
 #切换到 Node 14
 fnm use 14.21.3
 node -v  #应该显示 14.21.3
 ​
 #切换到 Node 16
 ​
 fnm use 16.15.1
 node -v  #应该显示 16.15.1
 ​
 #查看列表和当前激活的版本 (通常带星号或标记)
 fnm list


0

评论区