Tauri 嵌入外部二进制文件

2023-10-19 17:08 更新

有时,为了使应用程序正常运行或防止用户安装额外的依赖项(例如,Node.js或Python),你可能需要嵌入依赖的二进制文件。我们将这种二进制文件称为"sidecar"。

要捆绑你选择的二进制文件,你可以在tauri.conf.json文件中的tauri > bundle对象下添加externalBin属性。

externalBin属性需要一个字符串列表,其中包含目标二进制文件的路径,可以是绝对路径或相对路径。

以下是一个示例配置,用于说明配置的结构。这不是完整的tauri.conf.json文件:

{
"tauri": { "bundle": { "externalBin": [ "/absolute/path/to/sidecar", "relative/path/to/binary", "binaries/my-sidecar" ] }, "allowlist": { "shell": { "sidecar": true, "scope": [ { "name": "/absolute/path/to/sidecar", "sidecar": true }, { "name": "relative/path/to/binary", "sidecar": true }, { "name": "binaries/my-sidecar", "sidecar": true } ] } } } }

在这个示例中,externalBin属性包含了三个不同的二进制文件的路径,一个使用绝对路径,一个使用相对路径,还有一个使用相对路径的子目录。

对于externalBin中的每个条目,需要在指定的路径上存在一个带有-$TARGET_TRIPLE后缀的同名二进制文件。例如,"externalBin": ["binaries/my-sidecar"] 需要在Linux上存在一个src-tauri/binaries/my-sidecar-x86_64-unknown-linux-gnu可执行文件。你可以通过查看rustc -Vv命令报告的host:属性来找到当前平台的目标三重属性。

如果grep和cut命令可用,你可以直接使用以下命令从中提取目标三重属性,这些命令应该在大多数Unix系统上都可以使用:

rustc -Vv | grep host | cut -f2 -d' '

在Windows上,你可以使用PowerShell来执行相同的操作:

rustc -Vv | Select-String "host:" | ForEach-Object {$_.Line.split(" ")[1]}

以下是一个Node.js脚本,用于将目标三重属性附加到二进制文件的名称:

const execa = require('execa')
const fs = require('fs') let extension = '' if (process.platform === 'win32') { extension = '.exe' } async function main() { const rustInfo = (await execa('rustc', ['-vV'])).stdout const targetTriple = /host: (\S+)/g.exec(rustInfo)[1] if (!targetTriple) { console.error('Failed to determine platform target triple') } fs.renameSync( `src-tauri/binaries/sidecar${extension}`, `src-tauri/binaries/sidecar-${targetTriple}${extension}` ) } main().catch((e) => { throw e })

这个脚本会根据你的操作系统,在二进制文件的名称中附加目标三重属性。


以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号