python - app.asar (electron/nodejs) 中没有这样的文件或目录
问题描述
我正在构建一个运行 nodejs 的电子应用程序。gui 运行 html/js,并且我还有一些在后台运行的 python 脚本向用户显示数据。
当我在本地运行时它运行良好npm start
,但是当我选择将应用程序与electron-packager
库一起打包时,python 没有运行,并且在里面找不到app.asar
我相信解决方案是围绕使用展开的const originalFs = require('original-fs');
,originalFs.readFileSync(FILE);
但我对很多部署方面都是全新的,我不知道我是否走错了方向,或者这是否根本不可能。我的代码如下:
const subprocess = spawn('python', ['-u', __dirname + "/python/myscript.py", arg])
subprocess.stdout.on('data', (data) => {
console.log(`data:${data}`);
});
subprocess.stderr.on('data', (data) => {
console.log(`error:${data}`);
});
subprocess.stderr.on('close', () => {
console.log("Closed");
app.quit()
});
我也尝试设置--asar=false
并进入 /resources/app/ 文件夹以获取myscript.py
文件。这为应用程序提供了全部功能,但是,如果可能的话,我仍然希望能够将其全部打包asar.app
。
解决方案
在您的 Electron 应用程序中运行您的 python。请将您的 python 文件编译为可执行的二进制文件,并使您的电子应用程序嵌入此 bin 文件。这样即使没有在该设备上安装 python,这个电子应用程序也可以在任何设备上运行。这样会更舒服。
使用pyinstaller编译为可执行二进制文件。因此,您可以像这样添加电子生成器配置以将这个 bin 从 asar 中存储出来。
"build": {
"extraResources": [
{
"from": "bin",
"to": "bin"
}
]
}
打包后,这会将 bin 文件夹复制到/resource/bin 以便运行 bin 文件
let extension = '';
switch (process.platform) {
case 'darwin':
default:
break;
case 'win32':
case 'win64':
extension = '.exe';
break;
}
const basicURL =
process.env.NODE_ENV === 'development'
? path.join(__dirname, '../../bin')
: path.join(process.resourcesPath, 'bin');
const binURL = path.join(
basicURL,
`bin${extension}`
);
spawn(binURL, params);
我推荐electron-builder而不是electron-packager
推荐阅读
- recursion - When will iteration be more readable than recursion?
- javascript - Pass node js variable to ejs template
- css - Background-size transition on hover makes image shake on safari 11.0.3
- mysql - could not get any response
- google-cloud-platform - 限制 Bigquery 导出到 Cloud Storage
- sql-server - How to trace down more information about SQL Server session ID in the past?
- php - Second form on page not performing any action
- java - 在生成 Junit 报告期间无法编译样式表
- javascript - Facebook error on product detail page(use Send to messenger plugin)
- javascript - 迭代对象数组的子对象-ReactJS