所以,我正在开发一个使用Electron构建的小应用程序,它可以抓取网站并使用webshot截取屏幕截图。
我正在使用对话框模块,因此用户可以选择一个文件夹来保存屏幕截图。
webshot回调中的变量“filename”是用户选择的路径。
预期的行为是:
这是代码的简化部分:
var savePath = dialog.showSaveDialog(
{
title: 'save screenshots'
},
function(filename) {
if(filename === undefined) {
//if the user hit cancel return
return;
}
//ScreenShots options
var options = {
shotSize: {
height: 'all'
}
};
webshot(
www.example.com/page.html,
filename+'/screen.png',
options,
function(err) {
//some other logic that zip the folder
zipFolder(screens_folder, folder_name );
});
});
当我从命令行启动应用程序electron .
时,这可以正常工作,当我使用电子构建器打包应用程序时,webshot函数失败并出现以下错误:
Uncaught Exception:
Error: spawn ENOTDIR
at exports._errnoException (util.js:1026:11)
at ChildProcess.spawn (internal/child_process.js:313:11)
at Object.exports.spawn (child_process.js:392:9)
at Function.spawn (/Users/lorenzo/Desktop/web-dev/screenshots_app/dist/mac/screenShotApps.app/Contents/Resources/app.asar/node_modules/webshot/node_modules/cross-spawn/index.js:87:19)
at spawnPhantom (/Users/lorenzo/Desktop/web-dev/screenshots_app/dist/mac/screenShotApps.app/Contents/Resources/app.asar/node_modules/webshot/lib/webshot.js:201:32)
at spawn (/Users/lorenzo/Desktop/web-dev/screenshots_app/dist/mac/screenShotApps.app/Contents/Resources/app.asar/node_modules/webshot/lib/webshot.js:105:14)
at /Users/lorenzo/Desktop/web-dev/screenshots_app/dist/mac/screenShotApps.app/Contents/Resources/app.asar/node_modules/webshot/lib/webshot.js:117:16
at FSReqWrap.cb [as oncomplete] (original-fs.js:257:19)
编辑:我使用的是节点:6.5.0,Chrome:53.0.2785.113,电子版:1.4.3
答案 0 :(得分:0)
经过大量挖掘后,我最终找到了解决方案:
https://github.com/electron-userland/electron-builder/issues/335
我的应用程序中的节点生成函数,这是一个函数 这不适用于asar档案。我不得不阅读代码来计算 如何阻止电子建设者归档我的应用程序。
只需在构建部分设置" asar":false 的package.json。