首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用angular-electron打包可执行二进制文件

使用angular-electron打包可执行二进制文件
EN

Stack Overflow用户
提问于 2019-09-20 17:07:31
回答 1查看 497关注 0票数 0

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

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

代码语言:javascript
复制
  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运行电子:linux

应用程序使用二进制文件成功编译(因为使用二进制文件编译的应用程序的大小恰好等于二进制文件的裸角应用程序+大小)。当我尝试运行这个已编译的应用程序时,它失败了,并显示以下错误。

更新:我尝试了一种不同的方法,仍然没有结果。我已经创建了一个新的文件夹datapod/bin,并将可执行的二进制文件"datapod“复制到这个文件夹中。要将此文件夹复制到打包的应用程序中,请将以下代码行添加到electron-builder.js

代码语言:javascript
复制
 "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文件中编辑我的代码

代码语言:javascript
复制
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

代码语言:javascript
复制
npx asar extract /tmp/.mount_angulaG6ARST/resources/app.asar extrractedApp

文件夹的内容有外部/bin/datapod文件,但无法运行。

EN

回答 1

Stack Overflow用户

发布于 2020-05-18 05:54:20

将此代码片段添加到您的electron builder.json中。

代码语言:javascript
复制
  "extraResources": [
    {
      "from": "src/bin",
      "to": "bin",
      "filter": "**/*"
    }
  ],

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

代码语言:javascript
复制
  const root = process.cwd();

  getBinaryPath(binaryName: string) {
    const binariesPath = this.isProduction() ? path.join(root, 'resources', 'bin') : path.join(root, 'src', 'bin');
    return path.resolve(path.join(binariesPath, binaryName));
  }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58025246

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档