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二进制文件,并使其与所有其他节点模块一样易于要求