Jos*_*igo 17 python node.js electron electron-builder
我有一个Electron项目,它使用NodeJS的child_process模块执行一些python脚本.我的python脚本位于我项目的根文件夹中.
这是我调用python脚本的方式:
let py = spawn('python',['ResolvePosition.py', obsFilePath, navFilePath])
py.stdout.on('data', data => console.log('data : ', data.toString()))
py.on('close', ()=>{
// Python ends, do stuff
})
Run Code Online (Sandbox Code Playgroud)
如果我运行我的电子应用程序,npm start
当我使用npm模块为Windows构建可执行文件electron-builder
并运行可执行文件时dist/win-unpacked/my-app.exe
,这将无法正常工作,这将无法正常工作,似乎我的脚本无法访问python ./my-script-py
.
那么,我如何使这段代码适用于已构建的项目?
Jos*_*igo 18
我已经解决了我的问题.我将为可能的未来读者解释同样的问题.
使用电子构建器,有一些选项可以不将应用程序源代码打包到电子文件中.这些选项是:
ASAR
是否使用Electron的存档格式将应用程序的源代码打包到存档中.默认为true.必须解压缩的节点模块将被自动检测,您不需要显式设置asarUnpack - 如果这不起作用,请提出文件问题.
或者你可以传递asar选项的对象.
asarUnpack
相对于app目录的glob模式,它指定在创建asar存档时要解压缩的文件.
设置asar
以false
解决问题,但不建议使用electron-builder
.
所以包括我需要解压缩在一个文件夹中的所有文件,并使用
"asarUnpack" : "my-folder/*"
是正确的方法.现在所有已解压缩的文件都可用/resources/app.asar.unpacked/my-folder
另一件需要考虑的是使用路径'./ResolvePosition.py'
将查看我的电子项目的根文件夹,而不是我的NodeJS文件所在的路径,我需要使用:
let python = spawn('python', [path.join(__dirname, '../app.asar.unpacked/my-folder', 'ResolvePosition.py'), obsFilePath, navFilePath])
Run Code Online (Sandbox Code Playgroud)
您可以在extraResources中包含脚本:
"build": {
"extraResources": "python_scripts",
...
Run Code Online (Sandbox Code Playgroud)
然后dir将在app root:
let python = spawn('python', [path.join(app.getAppPath(), '..', 'python_scripts/my_script.py'])
Run Code Online (Sandbox Code Playgroud)