跳到内容
Tauri

Node.js 作为 Sidecar

在本指南中,我们将把 Node.js 应用程序打包成一个独立的二进制文件,作为 Tauri 应用程序的伴生应用,而无需最终用户安装 Node.js。本示例教程仅适用于桌面操作系统。

我们建议您首先阅读通用的伴生应用指南,以便更深入地了解 Tauri 伴生应用的工作原理。

在此示例中,我们将创建一个 Node.js 应用程序,该应用程序从命令行process.argv读取输入,并使用console.log将输出写入标准输出。
您可以利用替代的进程间通信系统,例如本地主机服务器、标准输入/标准输出或本地套接字。请注意,每种系统都有其优缺点和安全问题。

一个已使用 shell 插件设置好的现有 Tauri 应用程序,可在本地编译和运行。

  1. 让我们创建一个新的 Node.js 项目来包含我们的伴生应用实现。在您的 Tauri 应用程序根文件夹中创建一个新目录(在此示例中,我们将其命名为sidecar-app),并在该目录中运行您首选的 Node.js 包管理器的init命令

    npm init

    我们将使用pkg将我们的 Node.js 应用程序编译成一个独立的二进制文件。让我们将其安装为开发依赖项

    npm add @yao-pkg/pkg --save-dev
  2. 现在我们可以开始编写将由我们的 Tauri 应用程序执行的 JavaScript 代码。

    在此示例中,我们将处理命令行参数中的命令并将输出写入标准输出,这意味着我们的进程是短期的,并且一次只处理一个命令。如果您的应用程序必须是长期的,请考虑使用替代的进程间通信系统。

    让我们在sidecar-app目录中创建一个index.js文件并编写一个基本的 Node.js 应用程序

    sidecar-app/index.js
    const command = process.argv[2];
    switch (command) {
    case 'ping':
    const message = process.argv[3];
    console.log(`pong, ${message}`);
    break;
    default:
    console.error(`unknown command ${command}`);
    process.exit(1);
    }
  3. 为了将我们的 Node.js 应用程序打包成一个独立的二进制文件,我们可以运行以下pkg命令

    npm run pkg -- --output app

    这将在 Linux 和 macOS 上创建sidecar-app/app二进制文件,并在 Windows 上创建sidecar-app/app.exe可执行文件。要将此文件重命名为预期的 Tauri 伴生应用文件名,我们可以使用以下 Node.js 脚本

    import { execSync } from 'child_process';
    import fs from 'fs';
    const ext = process.platform === 'win32' ? '.exe' : '';
    const rustInfo = execSync('rustc -vV');
    const targetTriple = /host: (\S+)/g.exec(rustInfo)[1];
    if (!targetTriple) {
    console.error('Failed to determine platform target triple');
    }
    fs.renameSync(
    `app${ext}`,
    `../src-tauri/binaries/app-${targetTriple}${ext}`
    );
  4. 现在我们的 Node.js 应用程序已准备就绪,我们可以通过配置bundle > externalBin数组将其连接到我们的 Tauri 应用程序

    src-tauri/tauri.conf.json
    {
    "bundle": {
    "externalBin": ["binaries/app"]
    }
    }

    只要伴生应用二进制文件存在于src-tauri/binaries/app-<target-triple>中,Tauri CLI 就会处理伴生应用二进制文件的打包。

  5. 我们可以从 Rust 代码或直接从 JavaScript 运行伴生应用二进制文件。

    让我们直接在 Node.js 伴生应用中执行ping命令

    import { Command } from '@tauri-apps/plugin-shell';
    const message = 'Tauri';
    const command = Command.sidecar('binaries/app', ['ping', message]);
    const output = await command.execute();
    const response = output.stdout;

© 2025 Tauri 贡献者。CC-BY / MIT