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

相关推荐
古夕7 小时前
Vue3 + vue-query 的重复请求问题解决记录
前端·javascript·vue.js
不知名程序员第二部7 小时前
前端-业务-架构
前端·javascript·代码规范
Bug生产工厂7 小时前
React支付组件设计与封装:从基础组件到企业级解决方案
前端·react.js·typescript
小喷友7 小时前
阶段三:进阶(Rust 高级特性)
前端·rust
华仔啊7 小时前
面试官:请解释一下 JS 的 this 指向。别慌,看完这篇让你对答如流!
前端·javascript
小高0077 小时前
💥💥💥前端“隐藏神技”:15 个高效却鲜为人知的 Web API 大起底
前端·javascript
flyliu7 小时前
再再次去搞懂事件循环
前端·javascript
艾小码7 小时前
还在拍脑袋估工时?3个技巧让你告别加班和延期!
前端·敏捷开发
UrbanJazzerati7 小时前
前端入门:vh、padding、margin、outline、pointer-events
前端·面试