电子的app.relaunch()松散的stdio

时间:2016-11-10 11:05:45

标签: electron child-process relaunch

使用

chokidar.watch(mainFile).on('change', () => {
   app.relaunch();
   app.exit(0);
});

我可以让我的Electron应用程序在源更改时自动重新加载。但是,由于主进程被终止,我松开了调试所需的终端输出。有没有办法使用app.relaunch()保留父进程的stdio

1 个答案:

答案 0 :(得分:0)

免责声明:下面我解释一下我在2016年发现的不错的解决方法。不确定在2018年是否有更好的方法。

电子应用的重新加载分为两个部分:

渲染过程

我使用electron-reload仅在renderer文件夹中监听更改:

require("electron-reload")(path.join(__dirname, "/renderer"));

主要过程

通过Gulp脚本“手动”处理自动重新加载,如下所示:

let child = null;
let start = () => {
    // Was already running? Kill it and restart.
    if (child) child.kill();
    let env = process.env;
    env.NODE_ENV = "dev";
    child = proc.spawn(electron, ["./main/main.js"], { env: env });

    function print(data) {
        let str = data.toString().trim();
        if (str) gutil.log(str);
    }
    child.stdout.on("data", print);
    child.stderr.on("data", print);
};

// Run (dev mode with watch and autoreload)
gulp.task("dev", ["watch"], () => {
    start();
});

// Watch and move to dist on the fly.
// Hard reset if main process source changes.
gulp.task("watch", () => {
    // If ./renderer/**/*.js changes, electron-reload will handle reload of renderer process only.
    // If ./main/**/*.js changes, we kill the Electron process and start a new one.
    gulp.watch("./main/**/*.js", start);
});

使用gulp run dev运行应用程序将启动观察程序,并在文件更改时终止/重新启动整个应用程序。