# 调用 NodeJS 脚本方案

## 功能需求
- 参数1：脚本名称（`nodejs` 目录下的文件名，不含路径）
- 参数2+：可变参数数组（传给脚本的参数）
- 返回：脚本执行结果（JSON格式，包含输出和返回值）

## 实现方案

### 1. IPC 函数（main.js）

```javascript
const { spawn } = require('child_process')
const path = require('path')

ipcMain.handle('run-nodejs-script', async (event, scriptName, ...parameters) => {
  return new Promise((resolve, reject) => {
    const scriptPath = path.join(__dirname, '../nodejs', `${scriptName}.js`)
    const nodeProcess = spawn('node', [scriptPath, ...parameters])
    
    let stdout = ''
    let stderr = ''
    
    nodeProcess.stdout.on('data', (data) => {
      stdout += data.toString()
    })
    
    nodeProcess.stderr.on('data', (data) => {
      stderr += data.toString()
    })
    
    nodeProcess.on('close', (code) => {
      resolve({
        success: code === 0,
        stdout: stdout.trim(),
        stderr: stderr.trim(),
        exitCode: code
      })
    })
    
    nodeProcess.on('error', (error) => {
      reject(error)
    })
  })
})
```

### 2. Preload 暴露（preload.js）

```javascript
contextBridge.exposeInMainWorld('electronAPI', {
  runNodejsScript: (scriptName, ...parameters) => 
    ipcRenderer.invoke('run-nodejs-script', scriptName, ...parameters)
})
```

### 3. 前端调用（React）

```javascript
// 调用 adb-connect.js，传递参数
const result = await window.electronAPI.runNodejsScript('adb-connect', '192.168.2.5', '5555')
console.log(result.stdout) // 脚本输出
```

## 脚本要求
- 脚本需要接收命令行参数：`process.argv[2]`, `process.argv[3]` 等
- 脚本输出使用 `console.log()`，会捕获到 `stdout`
- 错误输出使用 `console.error()`，会捕获到 `stderr`

## 返回格式
```javascript
{
  success: true/false,  // 是否成功
  stdout: "脚本输出",    // 标准输出
  stderr: "错误信息",    // 错误输出
  exitCode: 0          // 退出码
}
```
