将预编译的二进制文件捆绑到电子应用程序中

2023-12-03

关于如何将第三方预编译的二进制文件(例如 imagemagick)包含到电子应用程序中,是否有一个好的解决方案?有 Node.js 模块,但它们都是包装器或本机绑定到系统范围内安装的库。我想知道是否可以在发行版中捆绑预编译的二进制文件。


这是另一种方法,目前已经在 Mac 和 Windows 上进行了测试。需要“app-root-dir”包,不需要手动添加任何内容到node_modules目录。

  1. 把你的文件放在下面资源/$os/, 在哪里$os或者是"mac", "linux", or "win"。构建过程将根据构建目标操作系统从这些目录复制文件。

  2. Put extraFiles构建配置中的选项如下:

包.json

  "build": {
    "extraFiles": [
      {
        "from": "resources/${os}",
        "to": "Resources/bin",
        "filter": ["**/*"]
      }
    ],
  1. 使用类似的方法来确定当前平台。

获取平台.js

import { platform } from 'os';

export default () => {
  switch (platform()) {
    case 'aix':
    case 'freebsd':
    case 'linux':
    case 'openbsd':
    case 'android':
      return 'linux';
    case 'darwin':
    case 'sunos':
      return 'mac';
    case 'win32':
      return 'win';
  }
};
  1. 根据环境和操作系统从您的应用程序调用可执行文件。这里我假设构建版本处于生产模式,源版本处于其他模式,但您可以创建自己的调用逻辑。
import { join as joinPath, dirname } from 'path';
import { exec } from 'child_process';

import appRootDir from 'app-root-dir';

import env from './env';
import getPlatform from './get-platform';

const execPath = (env.name === 'production') ?
  joinPath(dirname(appRootDir.get()), 'bin'):
  joinPath(appRootDir.get(), 'resources', getPlatform());

const cmd = `${joinPath(execPath, 'my-executable')}`;

exec(cmd, (err, stdout, stderr) => {
  // do things
});

我想我正在使用电子制造商作为基础,环境文件生成随之而来。基本上它只是一个 JSON 配置文件。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将预编译的二进制文件捆绑到电子应用程序中 的相关文章

随机推荐