用角电子封装可执行二进制文件

时间:2019-09-20 09:07:31

标签: python node.js angular electron electron-builder

我正在尝试在Linux上使用angular-electron打包python二进制可执行文件。我已经从堆栈溢出中遵循了这个答案。 bundling precompiled binary into electron app

在main.ts中,我已经编写了这个额外的代码段。我已将可执行二进制文件放在node_modules / datapod / datapod中,并将此路径符号链接到node_modules / .bin /文件夹中。

  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开始

我还可以查看python应用程序的日志。当我这样做时,

npm运行electronic: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文件,但无法运行。

1 个答案:

答案 0 :(得分:0)

将此代码段添加到您的electronic-builder.json中。

import requests

r = requests.get('https://blockchain.info/block-height/100?format=json')
data = r.json()

#print(r.text)
#print(data)
print(data['blocks'][0]['hash'])

此时,文件将被复制到apps根bin文件夹。下面是我创建的用于在开发和生产模式下执行文件的函数。

ListView(
        children: <Widget>[
          ChewieListItem(
            videoPlayerController: VideoPlayerController.asset(
              'videos/video_one.mp4'
            ),
            looping: false,
          ),
        ],
      ),