Электронное приложение Ошибка при перемещении папки сборки - PullRequest
0 голосов
/ 18 января 2019


В настоящее время я работаю над Electron-App, использующим NPM, который распаковывает файл в выбранный каталог. Установщик в принципе. Теперь, когда я создаю приложение, оно все еще работает нормально. Я просто запускаю setup.exe в своей папке win-unpacked, и все идет гладко. Теперь, когда я перемещаю распакованную папку win в другой каталог, мое приложение работает нормально, но когда оно запускает процесс разархивирования, оно выдает следующую ошибку:

enter image description here

Я заметил, что первый отображаемый путь к файлу (по какой-то причине) не использует utf8, но все остальные отображаются правильно (должно быть ä). Также я уже попытался удалить папку 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);
   });
});

Здесь я использую модуль bindings , чтобы запросить файл .node, который передает строку в мое приложение. И это, кажется, модуль, который вызывает ошибку.

Я пытался решить эту проблему в течение нескольких часов, но ничего, что я нашел в Интернете, не работает. Также я не смог найти никого, у кого была такая же ошибка, как у меня. Будем благодарны за любые предложения о том, как это исправить.

Поздравления
Matt.S

EDIT:

Возможно, я только что понял основную проблему. Модуль bindings содержит функцию, которая ищет корень модуля. Этот путь отображается в первой строке ОШИБКИ. Однако, поскольку это приложение уже создано, весь исходный код находится внутри файла app.asar. Кажется, что привязки не могут отличить файл .asar от обычной папки. Таким образом, даже если путь правильный, он не работает. Причина, по которой он работал в оригинальной распакованной win-версии, заключается в том, что привязки (если он не может найти корень модуля) перемещаются вверх по каталогу, пока не найдет корень. А поскольку исходная папка win-unpacked находится внутри моего проекта, в привязках каталогов используется не построенный модуль root.

1 Ответ

0 голосов
/ 21 января 2019

Мне удалось воспроизвести эту ошибку с помощью модуля привязок.

У электронного каркаса, похоже, много проблем, которые могут вызвать такое поведение.

Проблема с «корневым каталогом»

Вы сами ответили на это, отредактировав исходный вопрос, но для того, чтобы дать полный ответ, я включаю и это

Я просто запускаю setup.exe в своей папке win-unpacked, и все идет гладко. Теперь, когда я перемещаю распакованную папку win в другой каталог, мое приложение работает нормально, но когда оно запускает процесс разархивирования, оно выдает ошибку.

Это имеет интересную причину. Поскольку ваш каталог dist (место назначения вашего проекта) находится внутри вашего рабочего проекта, модуль привязок предполагает, что ваш рабочий каталог является корневым каталогом вашего встроенное приложение . Таким образом, он может определить путь к вашему модулю, и все работает нормально. Как только ваше встроенное приложение помещается в другое место, модуль привязок не может найти корневой каталог вашего приложения и выдает ошибку, с которой вы связались.

Файл ':' 'Проблема

Другая проблема модуля bindings - обработка путей с помощью протокола 'file'.

Кто-то уже пошел вперед и создал проблему (+ запрос на извлечение) для этой проблемы, поэтому вы могли бы изменить локальную установку этого модуля, даже если я не рекомендую принимать такие действия.

Мой личный совет:

Текущее состояние модуля привязок делает его непривлекательным для использования вместе с платформой Electron. Я слышал, что у него даже есть проблемы с правильной обработкой умлаутов, поэтому в вашей конкретной ситуации лучше всего избавиться от них. Вы можете создать небольшой локальный модуль, который обернет ваш двоичный файл .node и сделает его столь же простым, как и все остальные ваши узлы.

Это удивительная статья о создании собственного модуля.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...