electron区分asar打包模式
本文转载自:https://newsn.net/
“成也asar
,败也asar
”。asar
打包可以隐藏代码逻辑,减少文件数量,但是asar
也带来了第三方资源加载失败的问题。在上一篇文字中,苏南大叔描述了:针对electron-packager
,如何处理第三方资源。但是,也在文末留下了个伏笔,那就是:第三方资源定位位置做处理后,相关代码也要针对“是否是asar打包模式”进行区分处理。
本文中要描述的就是:在代码层面上,如何区分是否运行于asar
模式下。
判断依据的理论基础
electron
程序的运行路径中,不能出现名为app.asar
的文件夹名。这个论断,听起来应该是蛮新鲜的,但是大家可以自己亲身试一下看看,把自己写好的electron
程序,放到一个名为app.asar
的目录中,看看是否还能正常运行?
一定会显示功能异常的,连atom
这种著名的electron
程序,也出现了功能异常的情况。所以,苏南大叔推断:app.asar
必然是个特殊的保留字。
不过上图中,atom
的要加载的项目文件路径中有app.asar
字样。而本文要说明的主旨意思是:程序本身的路径中,不能含有app.asar
字样,稍稍有些区别。
判断是否为asar
模式的标准
本文中的方法是苏南大叔自己想的,并不是从别的地方学习的成功经验。所以,如果您有更好的是否为asar
打包的检测方式,欢迎给我留言。当然,有人会说:设置个开关参数,比如增加个变量debug
之类的。
苏南大叔总结的这个检测方式就:是判断__dirname
这个常量里面,是不是含有app.asar
字样。在使用electron-packager
打包后,根据是否使用--asar
参数,打包出来的release
包,是可能会出现两种情况的,一种是有asar
的包,另外一种是没有asar
包。但是,这种情况下,如果设置了debug
变量的话,都应该是false
,所以无法区分是否为asar
,进而对第三方资源的调用产生影响。
根据上一条目中的内容,苏南大叔推断:如果__dirname
出现了app.asar
的字样的话,那应该可以确认是属于asar
模式了。否则,程序功能会是异常的。很有可能,程序本身都不应该能够运行起来。
代码基本逻辑:如果是asar
模式的话,就到app.asar
上一层去寻找相关的第三方资源。
以上是 electron区分asar打包模式 的全部内容, 来源链接: utcz.com/a/119151.html