当前端在开发久了之后,我们可能会有很多个项目存在,然而由于node版本的兼容性问题,我们不同的项目使用的node.js版本完全不同。
这个时候我们想到用nvm来做版本管理,但是发现每次都需要使用nvm use "node.js --version"来手动切换,有没有方法可以让nvm对于不同项目指定不同版本,并且自动切换。
我研究了一下午,找到了配置的方法,通过我们windows的powerShell,用其内置命令去配置执行策略,执行我们自定义的函数方法,让它自动实现切换版本
js
// 首先,我们对于不同的项目,可以在powerShell中cd "项目路径",在项目的根路径中执行下面的命令
echo "此项目指定的node版本" > .nvmrc
// 它会在我们的项目根目录下生成一个.nvmrc文件,其中存放了我们指定的node.js版本
js
// 第二步:在powerShell中执行以下命令
$PROFILE
// 为了防止不同用户电脑自定义配置不同而出现错误,执行这个命令找到windows读取配置的真实路径
// 输出结果类似 'D:\BaseInfoMove\文档\WindowsPowerShell\Microsoft.PowerShell_profile.ps1'
// 第三步:有点同学可能像我一样,因为自己改动的电脑配置导致读取位置不在默认C盘,因此需要创建目标目录文件
New-Item -Path "D:\BaseInfoMove\文档\WindowsPowerShell" -ItemType Directory -Force
// 执行这行脚本来创建目标文件, 注意:自己第二步输出的路径,不要硬抄,要用自己的(最后的文件名不要)
// 第四步:一次性创建并写入脚本,执行以下命令,一次性复制,如果有提示,直接确定即可
@"
# Auto-load .nvmrc on directory change
function Enter-Directory {
`$currentDir = Get-Location
`$nvmrcPath = "`$currentDir\.nvmrc"
if (Test-Path `$nvmrcPath) {
`$version = Get-Content `$nvmrcPath -First 1 | Where-Object { `$_ -match '^\d' }
if (`$version) {
Write-Host "🔄 Switching to Node.js `$version..." -ForegroundColor Cyan
nvm use `$version --silent
}
}
}
`$lastDir = ""
Register-EngineEvent -SourceIdentifier PowerShell.OnIdle -Action {
if (`$lastDir -ne (Get-Location).Path) {
`$lastDir = (Get-Location).Path
Enter-Directory
}
} | Out-Null
# Run on startup
Enter-Directory
"@ | Set-Content -Path "$PROFILE" -Encoding UTF8
// 这段脚本会自动创建在第三步创建目标目录时省略的文件,并写入执行脚本
// 最后一步:设置执行策略
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser -Force
// 这一步是在更改我们windows的powerShell的执行策略,让它打开的时候自动执行我们的脚本,以监听目录变动,自动查询读取项目中的.nvmrc配置文件,切换指定node.js(有的话,没有指定不会切换,不会报错,勿忧)
以上步骤执行完之后,重启powerShell即可,cd进入项目目录,会有自定义提示
php
🔄 Switching to Node.js `$version...
// 这是我们的脚本自定义提示,切换node版本提示,不必执行任何操作
// 提示出现后回车执行nvm current即可查看当前node版本,此时node版本应该已经切换成功了