Node 版本自动切换

Node 版本自动切换
在开发过程中,我们可能会遇到这样的问题:项目 A 需要 Node v14,项目 B 需要 Node v16,而我们虽然使用了 nvm 工具来控制 Node 的版本管理,但遇到同时开发的时候,还是会很影响开发效率
• 保证开发人员使用相同的 Node 版本
• 如果未安装对应版本,自动提示安装 Node 版本流程化
• 自动切换 Node 版本,减少心智负担
暂只支持 Windows
在这里插入图片描述
使用
原理
利用终端 shell 的别名(alias)功能,将 npm 命令重命名为 npmm,在执行 npmm 命令时,先执行 nvm use 切换到项目指定的 Node 版本,再执行 npm 命令
npmm run dev
配置
在项目的 package.json 中设置 engines 字段
{
“engines”: {
“node”: “>=14.21.3”
}
}
在终端 shell 中,键入 notepad $profile 打开 PowerShell 配置文件,添加下面代码
PowerShell 脚本源码

Set-Alias npmm Set-NpmAlias

function Set-NpmAlias {
$allArgs = $args
$verbose = $allArgs -contains “-Verbose”

if ($verbose) {
$allArgs = $allArgs | Where-Object { $_ -ne “-Verbose” }
}

Set-Nvm -Verbose:$verbose
npm $allArgs
}

function Set-Nvm {
[CmdletBinding()]
param()

检查 nvm 是否安装

$nvm = ( G e t − C o m m a n d n v m − E r r o r A c t i o n S i l e n t l y C o n t i n u e ) i f ( (Get-Command nvm -ErrorAction SilentlyContinue) if ( (GetCommandnvmErrorActionSilentlyContinue)if(null -eq $nvm) {
Write-Host “nvm 不存在`n” -ForegroundColor Red
Write-Host “- 如果已安装,请确认是否将 nvm 添加到环境变量” -ForegroundColor Yellow
Write-Host “- 如果未安装” -ForegroundColor Yellow
Write-Host " + 在 PowerShell 中执行 winget install CoreyButler.NVMforWindows" -ForegroundColor Yellow
Write-Host " + 访问 https://github.com/coreybutler/nvm-windows/releases 下载最新版本" -ForegroundColor Yellow
Write-Host “”
}

检查当前所在目录是否是前端项目

$packageJson = ( G e t − C h i l d I t e m − P a t h . − F i l t e r p a c k a g e . j s o n − E r r o r A c t i o n S i l e n t l y C o n t i n u e ) i f ( (Get-ChildItem -Path . -Filter package.json -ErrorAction SilentlyContinue) if ( (GetChildItemPath.Filterpackage.jsonErrorActionSilentlyContinue)if(null -eq $packageJson) {
return
}

$nodeVersion = ‘’
$currentNodeVersion = ( ( ((node -v)).replace(‘v’, ‘’)
$versionFrom = ‘’

检查 package.json 中是否有 engines.node 字段

$enginesNode = ( G e t − C o n t e n t p a c k a g e . j s o n ∣ C o n v e r t F r o m − J s o n ) . e n g i n e s . n o d e i f ( (Get-Content package.json | ConvertFrom-Json).engines.node if ( (GetContentpackage.jsonConvertFromJson).engines.nodeif(null -eq KaTeX parse error: Expected '}', got 'EOF' at end of input: …e) { if (VerbosePreference -eq “Continue”) {
Write-Host “package.json 中没有 engines.node 字段” -ForegroundColor Yellow
Write-Host “”
}
}
else {
# 处理 engines.node 字段
$nodeVersion = $enginesNode -replace ‘[>=< ]’, ‘’
v e r s i o n F r o m = ′ p a c k a g e . j s o n ′ i f ( versionFrom = 'package.json' if ( versionFrom=package.jsonif(VerbosePreference -eq “Continue”) {
Write-Host “当前项目的 package.json 中指定的 node 版本为 v$nodeVersion” -ForegroundColor Yellow
}
}

检查当前目录是否有 .nvmrc 文件

$nvmrc = ( G e t − C h i l d I t e m − P a t h . − F i l t e r . n v m r c − E r r o r A c t i o n S i l e n t l y C o n t i n u e ) i f ( (Get-ChildItem -Path . -Filter .nvmrc -ErrorAction SilentlyContinue) if ( (GetChildItemPath.Filter.nvmrcErrorActionSilentlyContinue)if(null -eq KaTeX parse error: Expected '}', got 'EOF' at end of input: …c) { if (VerbosePreference -eq “Continue”) {
Write-Host “当前目录没有 .nvmrc 文件” -ForegroundColor Yellow
Write-Host “”
}
}
else {
$nodeVersion = $(Get-Content .nvmrc).replace(‘v’, ‘’)
v e r s i o n F r o m = ′ . n v m r c ′ i f ( versionFrom = '.nvmrc' if ( versionFrom=.nvmrcif(VerbosePreference -eq “Continue”) {
Write-Host “当前项目的 .nvmrc 文件中指定的 node 版本为 v$nodeVersion” -ForegroundColor Yellow
}
}

如果没有找到 node 版本,使用默认版本

if ($nodeVersion -eq ‘’) {
$nodeVersion = $currentNodeVersion
v e r s i o n F r o m = ′ n o d e − v ′ i f ( versionFrom = 'node -v' if ( versionFrom=nodevif(VerbosePreference -eq “Continue”) {
Write-Host “没有在项目下找到指定的 node 版本, 使用默认版本 v$nodeVersion” -ForegroundColor Yellow
}
}

如果版本一致,不需要切换

if ($nodeVersion -eq KaTeX parse error: Expected '}', got 'EOF' at end of input: …n) { if (VerbosePreference -eq “Continue”) {
Write-Host “当前 node 版本为 v$nodeVersion,无需切换” -ForegroundColor Yellow
Write-Host “”
}
return
}

Write-Host “指定 Node 版本( v e r s i o n F r o m ) : v versionFrom): v versionFrom):vnodeVersion” -ForegroundColor Green

$response = nvm use n o d e V e r s i o n i f ( nodeVersion if ( nodeVersionif(response -match ‘is not installed’) {
$confirmInstall = Read-Host “是否安装 node 版本 n o d e V e r s i o n ( y / n ) " i f ( nodeVersion (y/n)" if ( nodeVersion(y/n)"if(confirmInstall -eq ‘y’) {
Write-Host “”
if ($response -match ‘64-bit’) {
nvm install $nodeVersion x64
}
else {
nvm install $nodeVersion x86
}
nvm use KaTeX parse error: Expected 'EOF', got '}' at position 19: …eVersion }̲ else { …currentNodeVersion 继续后面的操作” -ForegroundColor Yellow
Write-Host “”
return
}
}
else {
Write-Host $response
}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值