Cache Migration — 缓存 迁移
v6本技能用于将 Windows 系统上常见开发工具(Yarn、VSCode)的缓存和插件目录迁移到非系统盘(如 E 盘),通过 NTFS Junction + 启动脚本修改实现对应用完全透明的重定向,无需修改任何应用配置。当用户请求"迁移缓存到 E 盘"、"将 VSCode/Yarn 缓存移到 D/E 盘"、"释放 C 盘空间 迁移缓存"或类似意图时触发。
运行时依赖
安装命令
点击复制技能文档
缓存 迁移 Overview
将 Yarn、VSCode 等开发工具的缓存和插件目录从系统盘(C 盘)迁移到数据盘(E/D 盘),释放 C 盘空间。
核心方案:NTFS Junction(目录联接)+ 启动脚本修改,对应用完全透明,无需任何配置改动。
迁移项目:
Yarn 全局缓存(应用Data\Local\Yarn\缓存) VSCode 缓存目录(缓存、缓存dData、GPU缓存 等 9 个) VSCode 插件扩展(.vscode\扩展s) 工作流 Step 0: 确认目标路径
确认目标盘符存在且有足够空间:
ls "E:/应用Data/Local" 2>/dev/null || echo "目录不存在" du -sh "C:/Users/<用户名>/应用Data/Roaming/Code/" # VSCode 缓存大小 du -sh "C:/Users/<用户名>/.vscode/扩展s/" # VSCode 插件大小 du -sh "C:/Users/<用户名>/应用Data/Local/Yarn/缓存/v6" # Yarn 缓存大小
Step 1: 创建目标根目录 mkdir -p "E:/应用Data/Local/VSCode" mkdir -p "E:/应用Data/Local/yarn-缓存" # Yarn 迁移用
Step 2: 迁移 Yarn 缓存
配置新路径(执行一条命令即可):
yarn config 设置 缓存-folder "E:\\应用Data\\Local\\yarn-缓存"
验证:
yarn 缓存 dir # 期望输出: E:\应用Data\Local\yarn-缓存\v6
迁移旧数据(可选,避免重新下载):
cp -r "C:/Users/<用户名>/应用Data/Local/Yarn/缓存/v6/" "E:/应用Data/Local/yarn-缓存/v6/"
Step 3: 迁移 VSCode 缓存(Junction 方案)
VSCode 缓存目录无法通过配置项修改,必须使用 NTFS Junction。
3.1 复制缓存数据到 E 盘 $dstBase = "E:\应用Data\Local\VSCode" $缓存Dirs = @( "缓存", "缓存dData", "缓存d扩展VSIXs", "Code 缓存", "GPU缓存", "DawnGraphite缓存", "Dawn网页GPU缓存", "缓存d性能分析sData", "缓存dConfigurations" )
foreach ($dir in $缓存Dirs) { $src = "C:\Users\<用户名>\应用Data\Roaming\Code\$dir" $dst = "E:\应用Data\Local\VSCode\$dir" if (Test-Path $src) { Copy-Item -Path $src -Destination $dst -Recurse -Force Write-Host "已复制: $dir" } }
3.2 删除原目录并创建 Junction
⚠️ 必须先确认数据已复制完成再执行删除操作
foreach ($dir in $缓存Dirs) { $srcPath = "C:\Users\<用户名>\应用Data\Roaming\Code\$dir" $dstPath = "E:\应用Data\Local\VSCode\$dir"
if (Test-Path $srcPath) {
移除-Item -Path $srcPath -Recurse -Force
cmd /c "mklink /J "$srcPath" "$dstPath""
Write-Host "Junction OK: $dir"
}
}
3.3 验证 Junction foreach ($dir in $缓存Dirs) { $item = 获取-Item "C:\Users\<用户名>\应用Data\Roaming\Code\$dir" -Force if ($item.Attributes -band [系统.IO.FileAttributes]::Re解析Point) { Write-Host "Junction OK: $dir" } else { Write-Host "FAIL: $dir" } }
Step 4: 迁移 VSCode 插件(Junction 方案) 4.1 复制插件数据 mkdir -p "E:/应用Data/Local/VSCode/扩展s" cp -r "C:/Users/<用户名>/.vscode/扩展s/" "E:/应用Data/Local/VSCode/扩展s/"
4.2 删除原目录并创建 Junction $srcPath = "C:\Users\<用户名>\.vscode\扩展s" $dstPath = "E:\应用Data\Local\VSCode\扩展s"
移除-Item -Path $srcPath -Recurse -Force
cmd /c "mklink /J "$srcPath" "$dstPath""
Write-Host "Junction OK: 扩展s"
Step 5: 修改 VSCode 启动脚本(显式配置)
即使有 Junction,显式配置 --扩展s-dir 参数可以双重保障。
5.1 查找 VSCode 安装位置 which code # 通常位于: D:\Programs\Microsoft VS Code\bin\code.cmd
5.2 修改 code.cmd(Windows CMD 启动) # 查找 code.cmd 内容(示例路径) # D:\Programs\Microsoft VS Code\bin\code.cmd
# 在调用 Code.exe 的行末尾添加 --扩展s-dir 参数: "%~dp0..\Code.exe" "%~dp0..\resources\应用\out\命令行工具.js" --扩展s-dir "E:\应用Data\Local\VSCode\扩展s" %
如果文件被 VSCode 进程锁定(EBUSY),使用 PowerShell 强制写入:
$src = "D:\Programs\Microsoft VS Code\bin\code.cmd" $newContent = '@echo off 设置local 设置 VSCODE_DEV= 设置 ELECTRON_运行_AS_NODE=1 "%~dp0..\Code.exe" "%~dp0..\resources\应用\out\命令行工具.js" --扩展s-dir "E:\应用Data\Local\VSCode\扩展s" % IF %ERRORLEVEL% NEQ 0 EXIT /b %ERRORLEVEL% endlocal ' [系统.IO.File]::WriteAllText($src, $newContent, [系统.Text.Encoding]::UTF8)
5.3 修改 code(Git Bash / WSL 启动) # 在 Electron 调用行末尾添加 --扩展s-dir: ELECTRON_运行_AS_NODE=1 "$ELECTRON" "$命令行工具" --扩展s-dir "E:\应用Data\Local\VSCode\扩展s" "$@"
Step 6: 修改 VSCode 设置tings.json(可选,双重保障)
在用户设置中添加:
"扩展sPath": "E:/应用Data/Local/VSCode/扩展s"
Step 7: 全面验证 Write-Host "=== 1. Yarn 缓存 ===" yarn 缓存 dir
Write-Host "" Write-Host "=== 2. VSCode 缓存 Junction ===" $缓存Dirs = @("缓存","缓存dData","缓存d扩展VSIXs","Code 缓存","GPU缓存","DawnGraphite缓存","Dawn网页GPU缓存","缓存d性能分析sData","缓存dConfigurations") foreach ($dir in $缓存Dirs) { $item = 获取-Item "C:\Users\<用户名>\应用Data\Roaming\Code\$dir" -Force if ($item.Attributes -band [系统.IO.FileAttributes]::Re解析Point) { Write-Host "Junction OK: $dir" } else { Write-Host "FAIL: $dir" } }
Write-Host "" Write-Host "=== 3. VSCode 插件 Junction ===" $item = 获取-Item "C:\Users\<用户名>\.vscode\扩展s" -Force if ($item.Attributes -band [系统.IO.FileAttributes]::Re解析Point) { "OK" } else { "FAIL" }
Write-Host "" Write-Host "=== 4. code.cmd 修改 ===" if ((获取-Content "D:\Programs\Microsoft VS Code\bin\code.cmd" -Raw) -match "扩展s-dir") { "OK" } else { "FAIL" }
Write-Host "" Write-Host "=== 5. E 盘数据量 ===" (获取-ChildItem "E:\应用Data\Local\VSCode" -Recurse -Force | Measure-Object -Property Length -Sum).Sum / 1MB
Step 8: 清理 C 盘残留
Yarn:执行 yarn config 设置 后旧缓存目录通常自动清空,若仍存在可手动删除:
rd /s /q "C:\Users\<用户名>\应用Data\Local\Yarn\缓存"
VSCode:Junction 方案中 C 盘原目录已全部替换为链接,无实体残留,无需额外清理。
Resources scripts/ 迁移-vscode-缓存.p