From a8119016f9a6027261ca22106bd2f16c3424604c Mon Sep 17 00:00:00 2001 From: JSR Date: Thu, 19 Mar 2026 21:19:51 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20tauri=E5=BC=80=E5=8F=91=E8=87=AA?= =?UTF-8?q?=E5=8A=A8=E9=80=92=E5=A2=9E=E5=8F=AF=E7=94=A8Vite=E7=AB=AF?= =?UTF-8?q?=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 2 +- scripts/tauri-dev.cjs | 64 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 65 insertions(+), 1 deletion(-) create mode 100644 scripts/tauri-dev.cjs diff --git a/package.json b/package.json index 7757b56..862e526 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ "dev": "vite", "build": "vite build", "tauri": "tauri", - "tauri:dev": "tauri dev", + "tauri:dev": "node scripts/tauri-dev.cjs", "tauri:build": "tauri build", "ios:sim": "node scripts/ios-sim.js", "format": "prettier --write .", diff --git a/scripts/tauri-dev.cjs b/scripts/tauri-dev.cjs new file mode 100644 index 0000000..d1ad7f0 --- /dev/null +++ b/scripts/tauri-dev.cjs @@ -0,0 +1,64 @@ +const net = require('node:net') +const { spawn } = require('node:child_process') + +const START_PORT = Number.parseInt(process.env.TAURI_DEV_PORT_START || '1420', 10) + +function canUsePort(port) { + return new Promise((resolve) => { + const server = net.createServer() + + server.once('error', () => { + resolve(false) + }) + + server.once('listening', () => { + server.close(() => resolve(true)) + }) + + server.listen(port, '127.0.0.1') + }) +} + +async function findAvailablePort(startPort) { + let port = startPort + while (!(await canUsePort(port))) { + port += 1 + } + return port +} + +async function main() { + const port = await findAvailablePort(START_PORT) + const overrideConfig = { + build: { + beforeDevCommand: `npm run dev -- --host --port ${port} --strictPort`, + devUrl: `http://localhost:${port}`, + }, + } + + console.log(`[tauri:dev] 使用端口 ${port}`) + + const extraArgs = process.argv.slice(2) + const pnpmCmd = process.platform === 'win32' ? 'pnpm.cmd' : 'pnpm' + const child = spawn( + pnpmCmd, + ['tauri', 'dev', '-c', JSON.stringify(overrideConfig), ...extraArgs], + { + stdio: 'inherit', + env: process.env, + } + ) + + child.on('exit', (code, signal) => { + if (signal) { + process.kill(process.pid, signal) + return + } + process.exit(code ?? 1) + }) +} + +main().catch((error) => { + console.error('[tauri:dev] 启动失败:', error) + process.exit(1) +})