electron-builder进行DEBUG输出的正确方式
前言
使用Electron进行打包通常会用到electron-builder或者electron-packager两种工具。在使用electron-builder的时候,由于对机制的不熟悉,我们在打包过程中常常遇到很多环境错误,但最终只是一些简单的错误信息,难以排查问题。本文将介绍electron-builder进行DEBUG输出的正确方式来帮助排查打包过程中的各种问题。
本地node与electron内部的node
在对Electron进行打包的时候,需要对当前Electron项目中使用到的node原生C/C++模块进行额外的平台编译,这个过程被称为rebuild。有这样的一个步骤,是因为electron在运行主进程脚本的时候,是跑在了electron内部的一个nodejs环境的,electron内部的nodejs与开发机器上的nodejs并不一定是相同的。为了验证这一论点,我们进行如下的一个测试,来分别打印本地机器安装的node的版本和electon内部的node版本:

接下来是electron主进程脚本的node版本显示(main.js):

接下来是分别运行npm run show-local-node-version和npm run start:

可以看到输出确实和我们的理解是一致的,版本为11.2.0的electron内部的node版本呢是12,而我们本地机器上的node是14。这也侧面说明了为什么一般的electron应用程序会很大,因为一份electron应用程序,就有一个node的运行时。
electron-builder调试输出正确方式
electron-builder进行打包的时候,会建议你在此之前使用electron-builder install-app-deps的命令。该命令的作用就是针对即将打包的electron程序对应的node版本进行原生模块的编译工作,以达到模块运行时匹配。实际上,install-app-deps内部依然使用了node-gyp相关知识,关于这一块的知识,读者可以翻阅我之前的文章《node-pre-gyp以及node-gyp的源码简单解析(以安装sqlite3为例)》来了解,这里不再赘述。本文着重介绍electron-builder如何进行debug打印,好知道打包的过程中发生了什么。
- 首先我们准备在项目中,安装一个需要根据平台原生编译的npm包:
images。 - 然后在package.json中的scripts中添加一段脚本:
"installappdeps": "electron-builder install-app-deps" - 最后调用命令
npm rum installappdeps执行该脚本

DEBUG环境变量
在官方文档中指出了,你可以设置环境变量的方式来方便输出:
Set the DEBUG environment variable to debug what electron-builder is doing:
设置DEBUG环境变量值为字符串electron-builder:
DEBUG=electron-builder
FPM_DEBUG 环境变量,将会显示更多关于构建Linux平台程序的细节(除了snap和appimage)。
- cmd(Windows CMD)
On Windows the environment variable is set using the set command:
在Windows CMD设置环境变量可以使用如下命令:
set DEBUG=electron-builder
- PowerShell
PowerShell uses different syntax to set environment variables:
PowerShell使用不同的语法来设置环境变量:
$env:DEBUG=electron-builder
在我们的机器上,我们同样设置该环境变量,然后执行:

发现输出了大量的关于electron-builder的DEBUG打印,为我们了解electron-builder install-app-deps提供了更多的信息。
verbose参数
然而,有的时候光是设置上述DEBUG环境变量还不够,因为electron-builder内部在进行rebuild操作的时候,还会以子进程方式调用node-gyp等工具,这些工具可不会查看上面的环境变量来输出调试信息的。我们需要在electron-builder调用node-gyp的时候,还能够打印这些工具的调试信息。熟悉node的读者可能会说,那我使用electron-builder的时候,传入--verbose怎么样?就像如下的方式:
"installappdeps": "electron-builder install-app-deps --verbose"
不幸的是,虽然--verbose能被node-gyp识别,无法被electron-builder识别,。当你直接这么调用的时候,会出错:

那么要如何解决这个问题呢?正确的做法是编写两个scripts:
"scripts": {
......
"installappdeps": "electron-builder install-app-deps",
"installappdeps-with-verbose": "npm run installappdeps --verbose"
},
然后在想要进行verbose打印的时候,执行npm rum installappdeps-with-verbose:

可以看到,在install-app-deps的DEBUG打印前,我们还看到node给出的一些额外信息。
electron-builder进行DEBUG输出的正确方式的更多相关文章
- [转]Debug 和 Release 编译方式的区别
本文主要包含如下内容: 1. Debug 和 Release 编译方式的本质区别 2. 哪些情况下 Release 版会出错 3. 怎样“调试” Release 版的程序 Debug 和 Releas ...
- unity中Debug输出控制
1 需求: (1)选择在界面.console中输出,并且能够设置保存到文档 (2)控制debug是否输出,可以在debug模式下输出,release模式下不输出 2 参考: 谢谢雨松同学的博客:htt ...
- Debug 和 Release 编译方式的本质区别
一.Debug 和 Release 编译方式的本质区别 Debug 通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序.Release 称为发布版本,它往往是进行了各种优化,使得程 ...
- 在iOS微信浏览器中自动播放HTML5 audio(音乐)的2种正确方式
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 打开ElasticSearch、kibana、logstash的正确方式
作者:玩世不恭的Coder时间:2020-03-08说明:原创不易,本文为原创文章,未经允许不可转载,转载前请联系作者 打开ElasticSearch.kibana.logstash的正确方式 前言一 ...
- 用VSCode终端实现重定向比较程序输出和正确输出
在刷 OJ 题目或者进行编程考试或比赛时,经常需要对编写好的程序进行测试,即运行编写好的程序,输入样例输入或者自己编写的输入数据,查看程序输出结果和样例输出或者正确输出是否一致.这种方法有很多弊端,当 ...
- jquery中取消和绑定hover事件的正确方式
在网页设计中,我们经常使用jquery去响应鼠标的hover事件,和mouseover和mouseout事件有相同的效果,但是这其中其中如何使用bind去绑定hover方法呢?如何用unbind取消绑 ...
- C++builder Tokyo 调用com 不正确的变量类型
C++builder Tokyo 调用com 不正确的变量类型 tt.OleFunction("interface_call","MS01",&erro ...
- eclipse 导入包含子maven项目的maven项目时的正确方式(父子项目)
eclipse 导入包含子maven项目的maven项目时的正确方式(父子项目) NO1 导入时依次选择 import > Maven > Existing Maven Projects ...
随机推荐
- mysql复制内容到一张新表
-- 1.复制表结构及数据到新表 CREATE TABLE 新表 SELECT * FROM 旧表 -- 2.只复制表结构到新表 CREATE TABLE 新表 SELECT * FROM 旧表 WH ...
- docker安装与配置gitlab详细过程
docker安装与配置gitlab详细过程 1.打开网易镜像中心 https://c.163yun.com/hub#/m/home/ 2.搜索gitlab,获取下载地址.例如:docker pull ...
- xv6学习笔记(5) : 锁与管道与多cpu
xv6学习笔记(5) : 锁与管道与多cpu 1. xv6锁结构 1. xv6操作系统要求在内核临界区操作时中断必须关闭. 如果此时中断开启,那么可能会出现以下死锁情况: 进程A在内核态运行并拿下了p ...
- linux上安装Docker (非常简单的安装方法) 2019
Docker的三大核心概念:镜像.容器.仓库 镜像:类似虚拟机的镜像.用俗话说就是安装文件. 容器:类似一个轻量级的沙箱,容器是从镜像创建应用运行实例, 可以将其启动.开始.停止.删除.而这些容器都是 ...
- 求方程 p+q+r+s+t=pqrst 的全体自然数解(约定p<=q<=r<=s<=t)
解:方程左右的表达式分别记为u和v. 由题设有5t>=u. 0本来是不算入自然数的,现在的趋势是把0也算作自然数. 若p=0,则v=0,为使得u=0成立,q.r.s.t都必需为0. 这样就得到方 ...
- leaflet加载离线OSM(OpenStreetMap)
本文为博主原创,如需转载需要署名出处. leaflet作为广为应用的开源地图操作的API,是非常受欢迎,轻量级的代码让使用者更容易操作. 废话不多说,下面直接给出范例. 首先在这个网站下载leafle ...
- JSP(Java Server Pages)内置对象
request对象 (1)访问请求参数 处理HTTP请求中的各项参数.在这些参数中,最常用的就是获取访问请求参数.当通过超链接的形式发送请求时,可以为该请求传递参数,这可以通过在超链接的后面加上问好& ...
- sublime text 3 中文排序插件
ST3 的排序不支持中文按拼音排序,所以需要搞一个插件来支持这一特性 pypinyin 这个库可以把中文转成拼音,可惜不支持 python3.3,而 ST3 内置的 python 就是 3.3 我系统 ...
- Linux档案权限篇之一
一.查看档案的属性 "ls" 第一列为档案的权限: d:代表是目录 -:代表是文件 l:代表是连接文件(相当于windows里面的快捷方式) b:代表块设备(如硬盘) c:代表字符 ...
- TCP协议中的TIME_WAIT详细说明
文章目录 4.3设置TIME_WAIT状态的目的 4.3.1 实现TCP全双工连接的关闭 4.3.2 使过时的重复报文段失效 4.3.3 TIME_WAIT状态的自结束 4.3.4 TIME_WAIT ...