导出到AppImage时启动捆绑的外部脚本

时间:2019-06-17 17:47:30

标签: javascript electron electron-builder appimage

我已经用电子制作了自己的应用程序,并且在启动外部python脚本时遇到了生产版本方面的问题。

当我在开发环境中运行代码时,我会遇到类似的事情:

const out = spawnSync(PYTHON_LOCATION, ['-d', '-j', '-p', path, tempfile]);

,因为PYTHON_LOCATIONpublic/python.py,所以效果很好。

但是,当我使用electron-builder制作AppImage时,这是行不通的,因为显然找不到该脚本。一个AppImage应用程序是一个文件,很明显公共目录不会随它一起导出。

这个问题有解决方案吗?

谢谢!

2 个答案:

答案 0 :(得分:0)

在执行AppImage时,在流程环境上设置了AppDir变量,因此您必须检查该变量是否存在并已设置。然后,您可以建立正确的python脚本路径。

答案 1 :(得分:0)

Electron将大多数东西捆绑到一个app.asar文件中,该文件可能包含您想要的文件。问题是,Web上有一个或两个很好的建议,需要将AppImage文件相对于容器本身进行查询,相对于它们本身,这有点令人误解。现实情况是,我确信您已经发现,这些变化都不会起作用:

./PYTHON_LOCATION
/PYTHON_LOCATION
PYTHON_LOCATION

解决方案是您需要使用__dirname来找出图像在哪里。当您运行AppImage时,它最有可能在此文件夹下(但是,从IDE运行时,不是):

/tmp/.mount_YourApplicationNameHVTcDI/

因此__dirname是(假设应用程序是从app/electron/文件夹构建的:

/tmp/.mount_YourApplicationNameHVTcDI/resources/app.asar/app/electron

所以您的解决方案将是这样的:

Path.join(__dirname, PYTHON_LOCATION)

尽管Electron正在查看app.asar文件中的资源,但它对文件系统是透明的,并且看起来像一个文件夹。因此,您可以使用普通的文件I / O命令在其中查看。

请记住,在IDE中,__dirname将完全不同,因此文件也必须存在。