nodeJS - 通过 CLI 与在后台运行的电子应用程序通信

Wal*_*qar 6 javascript command-line-interface node.js electron

作为我试图实现的一个例子,考虑从终端启动 VS Code。code <file-name>如果不只是运行,该命令会打开 vs 代码的一个实例,或者告诉它以其他方式打开文件。此外,一旦打开,用户就可以再次将终端会话用于其他任务(就像进程被取消一样)。

我的脚本需要以相同的方式与我的电子应用程序交互,唯一的区别是我的应用程序将在托盘中而不是在 Dock 中可见。. 该解决方案只需要在 linux 上工作

lei*_*ing 3

使用 unix 套接字服务器进行进程间通信。

在电子

const handleIpc = (conn) => {
  conn.setEncoding('utf8');
  conn.on('data',(line) => {
    let args = line.split(' ');
    switch(args[0]) {
      case 'hey': 
        conn.write('whatsup\n');
        break;
      default: conn.write('new phone who this?\n');
    }
    conn.end();
  })
}
const server = net.createServer(handleIpc);
server.listen('/tmp/my-app.sock');
Run Code Online (Sandbox Code Playgroud)

那么你的 CLI 是:

#!/usr/bin/node
const net = require('net');
let args = process.argv;
args.shift(); // Drop /usr/bin/node 
args.shift(); // Drop script path

let line = args.join(' ');
net.connect('/tmp/my-app.sock',(conn)=>{
  conn.setEncoding('utf8');
  conn.on('data',(response)=>{
    console.log(response);
    process.exit(0);
  });
  conn.write(line+'\n');
}).on('error',(err)=>{
  console.error(err);
  process.exit(1);
});
Run Code Online (Sandbox Code Playgroud)