使用mini-blink中的mini-electron打包程序
按照mini-electron使用方法说的弄好,然而点击运行mini-electron.exe时没有出现程序界面。
下载到最新包解压到miniblink-package文件夹后,取出mini-electron.exe、node.dll文件放入工程目录下(其中node.dll会被覆盖),miniblink.asar放入resources目录下即可。此时运行mini-electron.exe即可看到效果。
当然,还有种更简单的方法,就是下载解压最新包后(例如叫miniblink-package),直接把vscode的resources\app文件夹拷入miniblink-package\resources\app。再运行mini-electron.exe即可。
弄好后我的文件目录如下:
用dbgview调试,点击运行mini-electron.exe后系统输出信息如下:
[3220] fs__write console.log:
[3220] default_app.js, option.file:E:\miniblink-181214\resources\app\package.json
[3220] fs__write console.log:
[3220] default_app main.js packagePath,E:\miniblink-181214\resources\app\index.html
[3220] fs__write console.log:
[3220] App threw an error during load
[3220] fs__write console.log:
[3220] E:\miniblink-181214\resources\app\index.html:1
[3220] (function (exports, require, module, __filename, __dirname) { <!DOCTYPE HTML>
[3220] ^
[3220] SyntaxError: Unexpected token <
在\miniblink-181214\resources\miniblink.asar\default_app\main.js 167行,
// Start the specified app if there is one specified in command line, otherwise
// start the default app.
if (option.file && !option.webdriver) {
const file = option.file;
const protocol = url.parse(file).protocol;
const extension = path.extname(file);
(大概是上面那里)
添加如下代码以调试:
console.log("option.flie: "+file);
console.log("protocol: "+protocol);
console.log("extname: "+extension);
再次运行mini-electron.exe,dbgview输出如下:
[11016] fs__write console.log:
[11016] default_app.js, option.file:E:\miniblink-181214\resources\app\package.json
[11016] fs__write console.log:
[11016] option.flie: E:\miniblink-181214\resources\app\package.json
[11016] fs__write console.log:
[11016] protocol: e:
[11016] fs__write console.log:
[11016] extname: .json
[11016] fs__write console.log:
[11016] default_app main.js packagePath,E:\miniblink-181214\resources\app\index.html
[11016] fs__write console.log:
[11016] App threw an error during load
运行mini-electron自带的默认app(能正常打开,无问题)时,dbgview输出如下:
[3736] fs__write console.log:
[3736] default_app.js, option.file:E:\miniblink-181214\resources\miniblink.asar\default_app\index.html
[3736] fs__write console.log:
[3736] option.flie: E:\miniblink-181214\resources\miniblink.asar\default_app\index.html
[3736] fs__write console.log:
[3736] protocol: e:
[3736] fs__write console.log:
[3736] extname: .html
分析:查源码发现,要想正常运行,packagePath得是json格式,不能是html。
既然默认版本的option.file是resources\miniblink.asar\default_app\index.html,照猫画虎,要确保自己的app的option.file是resources\miniblink.asar\app\index.html
解决方案:
对E:\miniblink-181214\resources\miniblink.asar\default_app\main.js进行修改,第56行
let tryPaths = ['../../app.asar/package.json', '../../app.asar/main.js', '../../app/package.json', '/index.html'];
改为:
let tryPaths = ['../../app.asar/package.json', '../../app.asar/main.js', '../../app/index.html'];
运行mini-electron.exe后程序界面出现,正常运行。
仅做记录。