【发布时间】:2017-07-26 11:46:20
【问题描述】:
我在使用 electron-builder 或 electron-packager 后遇到了问题,我相信问题出在 asar。如果我使用electron . 执行代码,它运行良好,但是如果我使用电子生成器或电子打包器构建可执行文件,当我调用子进程时,它会打开程序的另一个实例,并且不会执行预期的操作.
用电子。
当我点击“转换器”按钮时,它开始按预期将 .xml 文件转换为 PDF。
内置版本
代码
点击:
e.onclick = () => {
let path = document.getElementById("pasta").files[0].path.replace(/\\/g, '/');
let c1 = cp.spawn(process.execPath, [__dirname + '/child.js'], {
stdio: ['inherit', 'inherit', 'inherit', 'ipc']
});
c1.send(path);
c1.on('message', m => {
if(m.name === 'start') {
document.getElementById("start").className += " disabled";
}
if(m.name === 'process') {
document.getElementById("bar").style.width = m.data + "%";
}
if(m.name === 'end') {
document.getElementById("start").className = document.getElementById("start").className.replace(" disabled", '');
document.getElementById("bar").style.width = "0%";
window.alert("Conversão relizada com sucesso!");
}
});
}
Child.js
'use strict';
const pdf = require('../pdfCreator.js');
const timer = require('timers');
process.on('message', m => {
let path = m;
process.send({name: 'start'});
pdf.readDir(path, status => {
let percent = parseInt((status.now/status.total) * 100);
process.send({name: 'process', data: percent});
}, () => {
timer.setTimeout(() => {
process.send({name:'end'});
}, 1000);
});
});
【问题讨论】:
-
Git 仓库:link
-
我试图将子生成放在点击功能之外,结果是打开了无数个窗口。
-
我尝试将 cwd 设置为 __dirname,但效果不佳。
-
我发现 process.executePath 被设置为 de packager 生成的可执行文件。
标签: javascript node.js electron