Упаковка исполняемого двоичного файла с угловым электроном - PullRequest
0 голосов
/ 20 сентября 2019

Я пытаюсь упаковать двоичный исполняемый файл python с angular-electronic в Linux.Я следовал за этим ответом из переполнения стека. связывание предварительно скомпилированного двоичного файла в электронное приложение .

В main.ts я написал этот дополнительный фрагмент кода.Я поместил исполняемый двоичный файл в node_modules / datapod / datapod, а также вставил символическую ссылку в этот путь в node_modules / .bin / folder.

  const spawn = require('child_process').spawn;
  var appRootDir = require('app-root-dir').get();

  var datapodpath=appRootDir+'/node_modules/datapod/datapod';
  console.log(datapodpath)

  const datapod = spawn(datapodpath, [], {});  //add whatever switches you need here

  datapod.stdout.on( 'data', data => {
      console.log( `stdout: ${data}` );
    });
  datapod.stderr.on( 'data', data => {
      console.log( `stderr: ${data}` );
   })
   datapod.on( 'close', code => {
    console.log( `child process exited with code ${code}` );
  })

Все прекрасно работает, когда я

npm start

Я также вижу журналы для приложения на Python.Когда я это сделаю,

npm запустит электрон: linux

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

enter image description here ОБНОВЛЕНИЕ: Я пробовал другой метод, но по-прежнему нет результата.Я создал новую папку externals / bin и скопировал исполняемый двоичный файл «datapod» в эту папку.Чтобы скопировать эту папку в упакованное приложение, добавьте эти строки в Electron-Builder.js

 "files": [
        "**/*",
        "!**/*.ts",
        "!*.code-workspace",
        "!LICENSE.md",
        "!package.json",
        "!package-lock.json",
        "!src/",
        "!e2e/",
        "!hooks/",
        "!angular.json",
        "!_config.yml",
        "!karma.conf.js",
        "!tsconfig.json",
        "!tslint.json",
        "externals/bin"
    ],

Отредактировал мой код в файле main.ts

const appPath = process.env.NODE_ENV === 'production' ? process.resourcesPath : __dirname;


  const execPath =path.join(appPath, 'externals/bin/datapod');
  console.log(execPath)

Успешно компилирует, когда я пыталсячтобы запустить это приложение, я получил ту же ошибку.Я распаковал приложение в /tmp/.moun-angular***/resources/app.asar с

npx asar extract /tmp/.mount_angulaG6ARST/resources/app.asar extrractedApp

Содержимое папки действительно имеет файл externals / bin / datapod, но не запускается.

...