From f8d725e5729a0886110675639e60f5fea6a34ac9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=99=B4=E5=A4=A9?= Date: Mon, 16 Mar 2026 17:19:26 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20R2=E4=BC=98=E5=85=88=E7=BA=A7=E5=8F=8D?= =?UTF-8?q?=E8=BD=AC=20=E2=80=94=20=E5=B9=B3=E5=8F=B0=E9=A2=84=E8=A3=85?= =?UTF-8?q?=E5=BD=92=E6=A1=A3=E4=BC=98=E5=85=88(=E9=9B=B6=E7=BD=91?= =?UTF-8?q?=E7=BB=9C),=E9=80=9A=E7=94=A8tarball=E5=85=9C=E5=BA=95(?= =?UTF-8?q?=E4=BB=8D=E9=9C=80npm)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/dev-api.js | 20 ++++++++++---------- src-tauri/src/commands/config.rs | 20 +++++++++++--------- 2 files changed, 21 insertions(+), 19 deletions(-) diff --git a/scripts/dev-api.js b/scripts/dev-api.js index 1d9be93..a46790a 100644 --- a/scripts/dev-api.js +++ b/scripts/dev-api.js @@ -158,21 +158,21 @@ async function _tryR2Install(version, source, logs) { throw new Error(`CDN 版本 ${cdnVersion} 与请求版本 ${version} 不匹配`) } - // 优先通用 tarball(npm pack 产物,~50MB,全平台通用),其次平台特定 assets + // 优先平台特定预装归档(直接解压,零网络依赖),其次通用 tarball(需要 npm install) + const asset = (platform !== 'unknown') ? sourceObj.assets?.[platform] : null const tarball = sourceObj.tarball - const asset = sourceObj.assets?.[platform] - const useTarball = !!tarball?.url + const useAsset = !!asset?.url + const useTarball = !useAsset && !!tarball?.url - if (!useTarball && !asset?.url) { - if (platform === 'unknown') throw new Error('当前平台不支持 R2 加速') - throw new Error(`CDN 无 ${sourceKey}/${platform} 归档`) + if (!useAsset && !useTarball) { + throw new Error(`CDN 无 ${sourceKey} 可用归档(平台: ${platform})`) } - const archiveUrl = useTarball ? tarball.url : asset.url - const expectedSha = useTarball ? (tarball.sha256 || '') : (asset.sha256 || '') - const expectedSize = useTarball ? (tarball.size || 0) : (asset.size || 0) + const archiveUrl = useAsset ? asset.url : tarball.url + const expectedSha = useAsset ? (asset.sha256 || '') : (tarball.sha256 || '') + const expectedSize = useAsset ? (asset.size || 0) : (tarball.size || 0) const sizeMb = expectedSize ? `${(expectedSize / 1048576).toFixed(0)}MB` : '未知大小' - const mode = useTarball ? '通用 tarball' : `${platform} 预装归档` + const mode = useAsset ? `${platform} 预装归档` : '通用 tarball' logs.push(`CDN 下载: ${cdnVersion} (${mode}, ${sizeMb})`) // 下载到临时文件 diff --git a/src-tauri/src/commands/config.rs b/src-tauri/src/commands/config.rs index 45481e9..225e9c1 100644 --- a/src-tauri/src/commands/config.rs +++ b/src-tauri/src/commands/config.rs @@ -1041,7 +1041,17 @@ async fn try_r2_install( .and_then(|v| v.as_str()) .is_some(); - let (archive_url, expected_sha, expected_size) = if use_tarball { + let (archive_url, expected_sha, expected_size) = if let Some(a) = asset { + // 优先平台预装归档(直接解压,零网络依赖,最快) + ( + a.get("url") + .and_then(|v| v.as_str()) + .ok_or("归档 URL 缺失")?, + a.get("sha256").and_then(|v| v.as_str()).unwrap_or(""), + a.get("size").and_then(|v| v.as_u64()).unwrap_or(0), + ) + } else if use_tarball { + // 其次通用 tarball(需要 npm install,仍有网络依赖) let t = tarball.unwrap(); ( t.get("url") @@ -1050,14 +1060,6 @@ async fn try_r2_install( t.get("sha256").and_then(|v| v.as_str()).unwrap_or(""), t.get("size").and_then(|v| v.as_u64()).unwrap_or(0), ) - } else if let Some(a) = asset { - ( - a.get("url") - .and_then(|v| v.as_str()) - .ok_or("归档 URL 缺失")?, - a.get("sha256").and_then(|v| v.as_str()).unwrap_or(""), - a.get("size").and_then(|v| v.as_u64()).unwrap_or(0), - ) } else { return Err(format!("CDN 无 {source_key} 可用归档")); };