javascript - nodeJS - 通过 CLI 与后台运行的 Electron 应用程序通信

标签 javascript node.js electron command-line-interface

作为我要实现的目标的示例,请考虑从终端启动 VS Code。 code <file-name>如果不只是运行,命令会打开一个 vs 代码实例,否则会告诉它打开一个文件。此外,一旦打开,用户可以再次将终端 session 用于其他任务(就像进程被拒绝一样)。
我的脚本需要以相同的方式与我的 Electron 应用程序交互,唯一的区别是我的应用程序将在托盘中,而在扩展坞中不可见。
.
解决方案只需要在linux上工作

最佳答案

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

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');
那么你的 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);
});

关于javascript - nodeJS - 通过 CLI 与后台运行的 Electron 应用程序通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67850893/

相关文章:

electron - ipcMain在 Electron 中的广播消息

javascript - 通过在 javascript 中使用 RegExp 包含标签来过滤用户列表数组

javascript - Dojo xhrGet 只返回 null

javascript - 在 javascript 中交换页面内容。为什么没有解决办法呢?

javascript - Electron :加载外部脚本并将其传递给函数

javascript - 了解 MongoDB 文档上次更改时间的最佳方法是什么?

javascript - Firefox 中的 Ajax 问题

javascript - Rails 正在渲染部分 View ,而它应该只更新现有页面中的部分 View

node.js - ffmpeg将流转换为jpg缓冲区而不保存磁盘

javascript - AES-128-GCM 是否在 Node V6 上验证 IV?