在 Mac 上的 electron 应用程序中使用时,exiftool-vendored 不会 return?

exiftool-vendored doesn't return when used in an electron app on Mac?

在 Mac,当我 运行 来自 WebStorm 的应用程序时,exiftool-vendored 运行良好。但是,当我构建我的应用程序(我使用 electron-builder)并将其安装在同一个 Mac 上时,它从来没有 returns,甚至只是试图获取版本:

exiftool.version().then(version => writeBreadcrumb('exif', version))

换句话说,没有错误出现,并且 then 在 运行 我的应用程序的安装版本时从不执行,尽管它工作正常 运行 我的应用程序来自 WebStorm(cd build && electron .

我做错了什么?有没有关于如何在电子应用程序中使用 exiftool-vendored 的示例?

你应该看看文档是怎么说让它与 Electron 一起工作的:

How do you make this work with electron?

Electron is notoriously brittle and buggy, and is not officially supported by this package. Although PhotoStructure uses this package within electron, there's a nontrivial amount of auxiliary support code specific to that project to make it work smoothly.

If you're still anxious to try, here are some things to keep in mind:

  1. Note that this package will spawn exiftool external processes, which means the exiftool-vendored.pl and exiftool-vendored.exe packages should be included in your asarUnpack. SmartUnpack might work, but if it doesn't use a pattern like node_modules/{exiftool-vendored.*}/**/*.

  2. If you're requiring exiftool-vendored from within a webview, you're gonna have a bad time. Many things won't work due to a lack of node compatibility within electron.

  3. __dirname at runtime from within an asar package after webpacking will be invalid, so don't rely on that.

https://github.com/photostructure/exiftool-vendored.js/wiki/FAQ#how-do-you-make-this-work-with-electron

因为我从来没有找到让 exiftool-vendored 在 Mac 上使用 electron 的方法,所以我接受了上面的答案,本质上是一个警告,要避开 exiftool-vendored for electron在 Mac.

这个答案是为了完整性,对于我们这些需要 Mac 和 Windows 的电子应用程序中的 exiftool 的人:

我使用 node-exiftool 并在 package.json 中为 electron-builder 添加了这些设置:

"build": {
  ...
  "win": {
    ...
    "extraResources": "exiftoolwin/**/*"
  },
  "mac": {
    ...
    "extraResources": "exiftool/**/*"
  }
}

在项目的根目录中,我添加了文件夹 exiftoolwinexiftool。在 exiftoolwin 中,我放置了 exiftool.exe,这是我按照 Windows Stand-Alone 可执行指令 here 获得的,在我的 exiftool 文件夹中,我放置了 exiftoollib 是我通过在 Mac 上提取完整的 perl 分布获得的,如同一页所述。

然后,在我的 .jsx(我使用的是 React)中:

import exiftool from 'node-exiftool';
const exiftoolFolderAndFile = process.platform === 'win32' ? 'exiftoolwin/exiftool.exe' : 'exiftool/exiftool';
const exiftoolPath = path.resolve(__dirname, '../..', exiftoolFolderAndFile);
const ep = new exiftool.ExiftoolProcess(exiftoolPath);

然后我就按照 here 的描述使用 ep

这对我们有用:

添加此依赖项:

"exiftool-vendored": "^15.2.0",

更新 package.json mac 的“构建”部分(据我们所知,windows 不需要)

"build": {
  "mac": {
    ...
    "asarUnpack": [
       "node_modules/exiftool-vendored/**" ,
       "node_modules/exiftool-vendored.pl/**"
    ]
  }
}