Javascript 移动生成文件夹时出现Electron应用程序错误
Javascript 移动生成文件夹时出现Electron应用程序错误,javascript,jquery,node.js,build,electron,Javascript,Jquery,Node.js,Build,Electron,我目前正在使用NPM开发一个Electron应用程序,它可以将文件解压缩到选定的目录。基本上是一个安装程序。现在,当我构建应用程序时,它仍然可以正常工作。我只需启动win Unpacket文件夹中的setup.exe,一切都会顺利进行。现在,当我将win Unpacket文件夹移动到另一个目录时,我的应用程序运行正常,但当它启动解压缩过程时,会抛出以下错误: 我注意到,显示的第一个文件路径(出于某种原因)没有使用utf8,但所有其他文件路径都正确显示(应该是A)。此外,我还尝试删除node_m
我目前正在使用NPM开发一个Electron应用程序,它可以将文件解压缩到选定的目录。基本上是一个安装程序。现在,当我构建应用程序时,它仍然可以正常工作。我只需启动win Unpacket文件夹中的setup.exe,一切都会顺利进行。现在,当我将win Unpacket文件夹移动到另一个目录时,我的应用程序运行正常,但当它启动解压缩过程时,会抛出以下错误: 我注意到,显示的第一个文件路径(出于某种原因)没有使用utf8,但所有其他文件路径都正确显示(应该是A)。此外,我还尝试删除node_modules文件夹,然后运行npm I重新安装它们。仍然有同样的问题 以下是启动解压缩过程的代码:
const path = require('path');
const ipcRenderer = require('electron').ipcRenderer;
const Unzip = require('./unzip');
const os = require('os');
const fs = require('fs');
$('#information_next').click(function () {
var extractPath = $('#input_select').val();
let filepath;
const platform = os.platform();
const nodeName = platform == 'win32' ? 'wcd.node' : (platform == 'darwin' ? 'mcd.node' : 'lcd.node');
let customData = require("bindings")(nodeName);
let zip = h2a(customData.customData());
if(os.platform() == 'darwin') {
filepath = path.join(__dirname, '..', '..', '..', '..', 'ZIP.zip');
} else {
filepath = path.join(__dirname, '..', '..', 'ZIP.zip');
}
var xPath = path.join.apply(null, extractPath.split('\\'));
var unzip = new Unzip(filepath, xPath.toString());
unzip.extract(extractPath, zip, 100, (percentage) => {
// Code for Progressbar
finish = true;
setTimeout(function () {
$('.main_wrapper').addClass('hidden');
$('.main7').removeClass('hidden');
}, 1500);
}).catch((e) => {
$('.main6').addClass('hidden');
$('.main_install_error').prop('hidden', false);
});
});
在这里,我使用模块需要一个.node文件,该文件将字符串传递给我的应用程序。这似乎是导致错误的模块
我已经试着解决这个问题好几个小时了,但我在网上找不到任何有效的方法。我也找不到任何人有和我一样的错误。如有任何关于如何解决此问题的建议,将不胜感激
问候
马特·S 编辑:
我可能刚刚解决了主要问题。bindings模块包含一个查找模块根的函数。此路径显示在错误的第一行中。但是,由于此应用程序已全部就绪,因此所有源代码都位于app.asar文件中。绑定似乎无法区分.asar文件和普通文件夹。所以即使路径是正确的,它也不起作用。它在原始win Unpacket中工作的原因是绑定(如果找不到模块根)在目录中向上移动,直到找到根为止。由于原始的win Unpacket文件夹位于我的项目目录中,绑定使用未构建的模块根。我能够在绑定模块中重现此错误 它的电子结构似乎有很多问题,这些问题可能导致这种行为 “根目录”问题 你自己通过编辑原始问题回答了这个问题,但为了给出完整的答案,我也加入了这个 我只需启动win Unpacket文件夹中的setup.exe,一切都会顺利进行。现在,当我将win Unpacket文件夹移动到另一个目录时,我的应用程序运行正常,但当它启动解压缩过程时,会抛出一个错误 这有一个有趣的原因。由于您的dist目录(项目的生成目标)位于您的工作项目内,因此绑定模块假定您的工作目录是您构建的应用程序的根目录。因此,它能够解析模块的路径,并且一切正常。一旦将生成的应用程序放置在其他位置,绑定模块将无法找到应用程序的根目录,并抛出您链接的错误 “文件://”问题 绑定模块的另一个问题是使用“文件”协议处理路径 已经有人提出了(+拉请求)来解决此问题,因此您可以修改此模块的本地安装,尽管我不鼓励采取此类操作 我个人的忠告是: bindings模块的当前状态使其无法与Electron框架一起使用。我听说它甚至在正确处理UMLAUT时也有问题,所以在您的特定情况下,最好的办法就是摆脱它。您可以制作一个小型的本地模块,它包装您的.node二进制文件,并使其与所有其他节点模块一样易于要求