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 小时前
非常简单地学习一下shareDB的原理
前端·javascript
认真的薛薛6 小时前
阿里云: A记录 & CNAME
服务器·前端·阿里云
2301_815645386 小时前
css基础
前端·css
Hilaku6 小时前
求求你们🙏 ,别再换打包工具了?
前端·javascript·程序员
用户新6 小时前
V8引擎 精品漫游指南--Ignition篇(下 二) JavaScript 栈帧详解
前端·javascript
账号已注销free6 小时前
box-shadow完整用法
前端
得闲喝茶6 小时前
JavaScript在数据处理的应用
开发语言·前端·javascript·经验分享·笔记
前端那点事7 小时前
Vue3 script setup 语法糖最全教程!零基础吃透+项目落地+面试满分
前端·vue.js
ConardLi7 小时前
Harness 实践:让 Agent 全自动制作知识讲解视频
前端·人工智能·后端
努力干饭中7 小时前
Vibe Coding 第二弹:做一个 Canvas K线图
前端·canvas·vibecoding