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/...

相关推荐
不爱说话郭德纲6 小时前
告别漫长的HbuilderX云打包排队!uni-app x 安卓本地打包保姆级教程(附白屏、包体积过大排坑指南)
android·前端·uni-app
唐叔在学习7 小时前
[前端特效] 左滑显示按钮的实现介绍
前端·javascript
用户5282290301807 小时前
【学习笔记】ECMAScript 词法环境全解析
前端
青青家的小灰灰7 小时前
React 架构进阶:自定义 Hooks 的高级设计模式与最佳实践
前端·react.js·前端框架
Angelial7 小时前
Vite 性能瓶颈排查标准流程
前端
不要秃头啊7 小时前
别再谈提效了:AI 时代的开发范式本质变了
前端·后端·程序员
青青家的小灰灰7 小时前
深入理解事件循环:异步编程的基石
前端·javascript·面试
用泥种荷花7 小时前
【LangChain.js学习】 向量数据库(内存/持久化)
前端
simon_luv_pho8 小时前
一行代码把网页变成 AI Agent?
前端
兆子龙8 小时前
模块联邦(Module Federation)详解:从概念到手把手 Demo
前端·架构