在 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:
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.*}/**/*
.
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.
__dirname
at runtime from within an asar package after webpacking will be invalid, so don't rely on that.
因为我从来没有找到让 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/**/*"
}
}
在项目的根目录中,我添加了文件夹 exiftoolwin
和 exiftool
。在 exiftoolwin
中,我放置了 exiftool.exe
,这是我按照 Windows Stand-Alone 可执行指令 here 获得的,在我的 exiftool
文件夹中,我放置了 exiftool
和 lib
是我通过在 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/**"
]
}
}
在 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:
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.*}/**/*
.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.
__dirname
at runtime from within an asar package after webpacking will be invalid, so don't rely on that.
因为我从来没有找到让 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/**/*"
}
}
在项目的根目录中,我添加了文件夹 exiftoolwin
和 exiftool
。在 exiftoolwin
中,我放置了 exiftool.exe
,这是我按照 Windows Stand-Alone 可执行指令 here 获得的,在我的 exiftool
文件夹中,我放置了 exiftool
和 lib
是我通过在 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/**"
]
}
}