Tauri2.0打包构建报错

打包时因为wix或nsis下载失败或超时而报错

注:该文章仅限于windows系统

原因

国内网关原因,博主clash科上~网也没用......

解决思路

自己手动下载wix和nsis文件并放到正确的目录里面。打包时检测到相应目录已存在文件就不会再去下载了

注:博主最后会提供一个下载的脚步,也可以通过脚本一键下载

这里要特别注意,博主当前下载的是0.5.1的版本。但后续改版本可能会更新,请参考github.com/tauri-apps/... 中所使用的当前版本。如果使用了错误的版本,打包时控制台会出现:Warn NSIS directory contains mis-hashed files. Redownloading them.

  • nsis-ApplicationID 插件下载地址:github.com/tauri-apps/...

  • 在C:\Users[你的用户名]\AppData\Local\中新建tauri目录,并把这些文件放到tauri目录下。tauri目录里面的结构如下 // 注:你的用户名请替换成你自己电脑本地的

如果还是会出现自动下载wix或nsis报错,尝试用以下PowerShell脚本自动下载相信文件并自动放置到合适目录中

PowerShell 复制代码
# This script is designed to run before building a Tauri application if build with error like:
# Error failed to bundle project: `https://github.com/wixtoolset/wix3/releases/download/wix3141rtm/wix314-binaries.zip: Connection Failed: Connect error:
# Error failed to bundle project: `https://github.com/tauri-apps/nsis-tauri-utils/releases/download/nsis_tauri_utils-v0.5.1/nsis_tauri_utils.dll: Connection Failed: Connect error:

# More info: https://github.com/tauri-apps/tauri/issues/7338

# 1. 删除之前的临时目录和目标目录,保证干净环境
Remove-Item -Recurse -Force -ErrorAction SilentlyContinue temp
$tauriDir = Join-Path $env:USERPROFILE "AppData\Local\tauri"
Remove-Item -Recurse -Force -ErrorAction SilentlyContinue (Join-Path $tauriDir "NSIS")
Remove-Item -Recurse -Force -ErrorAction SilentlyContinue (Join-Path $tauriDir "WixTools314")

# 2. 创建临时目录
if (!(Test-Path temp)) { mkdir temp }
cd temp

# 3. 下载 wix 工具(WixTools314)
Invoke-WebRequest -Uri "https://github.com/wixtoolset/wix3/releases/download/wix3141rtm/wix314-binaries.zip" -OutFile "wix314-binaries.zip"
Expand-Archive ./wix314-binaries.zip -DestinationPath ./WixTools314

# 4. 下载 NSIS
Invoke-WebRequest -Uri "https://github.com/tauri-apps/binary-releases/releases/download/nsis-3/nsis-3.zip" -OutFile "nsis-3.zip"
Expand-Archive ./nsis-3.zip -DestinationPath ./NSIS

# 5. 移动 NSIS 文件夹下的 nsis-3.* 子目录内容到 NSIS 根目录
$nsisSubDir = Get-ChildItem .\NSIS | Where-Object { $_.PSIsContainer -and $_.Name -like 'nsis-3.*' } | Select-Object -First 1
if ($nsisSubDir) {
    Move-Item -Path (Join-Path $nsisSubDir.FullName '*') -Destination .\NSIS -Force
    Remove-Item $nsisSubDir.FullName -Recurse -Force
}

# 6. 下载 NSIS-ApplicationID 插件并解压
Invoke-WebRequest -Uri "https://github.com/tauri-apps/binary-releases/releases/download/nsis-plugins-v0/NSIS-ApplicationID.zip" -OutFile "NSIS-ApplicationID.zip"
Expand-Archive .\NSIS-ApplicationID.zip -DestinationPath .\NSIS-ApplicationID

# 7. 移动插件文件到 NSIS\Plugins\x86-unicode
$pluginDir = ".\NSIS\Plugins\x86-unicode"
if (!(Test-Path $pluginDir)) { New-Item -ItemType Directory -Path $pluginDir | Out-Null }
if (Test-Path ".\NSIS-ApplicationID\Release") {
    Move-Item ".\NSIS-ApplicationID\Release\*" $pluginDir -Force
}

# 8. 下载 nsis_tauri_utils.dll v0.5.1 并重命名覆盖到插件目录
Invoke-WebRequest -Uri "https://github.com/tauri-apps/nsis-tauri-utils/releases/download/nsis_tauri_utils-v0.5.1/nsis_tauri_utils.dll" -OutFile "nsis_tauri_utils.dll"
if (Test-Path "nsis_tauri_utils.dll") {
    $additionalPluginDir = Join-Path $pluginDir "additional"
    if (!(Test-Path $additionalPluginDir)) { New-Item -ItemType Directory -Path $additionalPluginDir | Out-Null }

    Copy-Item "nsis_tauri_utils.dll" (Join-Path $pluginDir "nsis_tauri_utils.dll") -Force
    Copy-Item "nsis_tauri_utils.dll" (Join-Path $additionalPluginDir "nsis_tauri_utils.dll") -Force
    
    Remove-Item "nsis_tauri_utils.dll" -Force
}

# 9. 移动 NSIS 和 WixTools314 到用户目录
if (!(Test-Path $tauriDir)) { New-Item -ItemType Directory -Path $tauriDir | Out-Null }
Move-Item .\NSIS (Join-Path $tauriDir "NSIS") -Force -ErrorAction SilentlyContinue
Move-Item .\WixTools314 (Join-Path $tauriDir "WixTools314") -Force -ErrorAction SilentlyContinue

Write-Host "rm temp dir"

# 10. 清理临时文件和目录
Remove-Item .\NSIS-ApplicationID -Recurse -Force -ErrorAction SilentlyContinue
Remove-Item .\nsis-3.zip -Force -ErrorAction SilentlyContinue
Remove-Item .\NSIS-ApplicationID.zip -Force -ErrorAction SilentlyContinue
Remove-Item .\wix314-binaries.zip -Force -ErrorAction SilentlyContinue
cd ..
Remove-Item .\temp -Recurse -Force -ErrorAction SilentlyContinue

Write-Host "done"

脚本里面的 nsis_tauri_utils.dll 用的是 v0.5.1 版本。如果版本已更新请自行在脚本里替换。查看tauri当前最新使用的nsis_tauri_utils版本方法请参考前面 对于不知道怎么运行该脚本的朋友:把该脚本复制到一个txt文本中。然后把文本重命名为 test.ps1 然后打开PowerShell ,进入到 test.ps1所在目录。然后输入:test.ps1 回车

参考资料:github.com/tauri-apps/...

相关推荐
北辰alk7 小时前
Next.js 为何抛弃 Vite?自造轮子 Turbopack 的深度技术解析
前端
Cache技术分享7 小时前
203. Java 异常 - Throwable 类及其子类
前端·后端
wingring7 小时前
Vue3 后台分页写腻了?我用 1 个 Hook 删掉 90% 重复代码
前端
LFly_ice7 小时前
学习React-20-useId
前端·学习·react.js
要加油哦~7 小时前
刷题 | 牛客 - 前端面试手撕题 - 中等 - 1-2/20 知识点&解答
前端·面试
Async Cipher8 小时前
JSON-LD 的格式
前端·javascript
LFly_ice8 小时前
学习React-18-useCallBack
前端·学习·react.js
How_doyou_do9 小时前
样式冲突修复组件
前端·javascript·html
IT_陈寒9 小时前
SpringBoot实战:这5个高效开发技巧让我节省了50%编码时间!
前端·人工智能·后端
isixe9 小时前
Uniapp IOS 和 Android 下的文件写入用户目录
前端·uni-app