我们相信:世界是美好的,你是我也是。平行空间的世界里面, 不同版本的生活 也在继续...

“成也 asar ,败也 asar ”。 asar 打包可以隐藏代码逻辑,减少文件数量,但是 asar 也带来了第三方资源加载失败的问题。在上一篇文字中,苏南大叔描述了:针对 electron-packager ,如何处理第三方资源。但是,也在文末留下了个伏笔,那就是:第三方资源定位位置做处理后,相关代码也要针对“是否是asar打包模式”进行区分处理。

苏南大叔:electron 如何区分是否为 asar 打包模式? - electron-asar-detect
electron 如何区分是否为 asar 打包模式?(图4-1)

本文中要描述的就是:在代码层面上,如何区分是否运行于 asar 模式下。

判断依据的理论基础

electron 程序的运行路径中,不能出现名为 app.asar 的文件夹名。这个论断,听起来应该是蛮新鲜的,但是大家可以自己亲身试一下看看,把自己写好的 electron 程序,放到一个名为 app.asar 的目录中,看看是否还能正常运行?

一定会显示功能异常的,连 atom 这种著名的 electron 程序,也出现了功能异常的情况。所以,苏南大叔推断: app.asar 必然是个特殊的保留字。

苏南大叔:electron 如何区分是否为 asar 打包模式? - atom_error
electron 如何区分是否为 asar 打包模式?(图4-2)

不过上图中, atom 的要加载的项目文件路径中有 app.asar 字样。而本文要说明的主旨意思是:程序本身的路径中,不能含有 app.asar 字样,稍稍有些区别。

判断是否为 asar 模式的标准

本文中的方法是苏南大叔自己想的,并不是从别的地方学习的成功经验。所以,如果您有更好的是否为 asar 打包的检测方式,欢迎给我留言。当然,有人会说:设置个开关参数,比如增加个变量 debug 之类的。

苏南大叔总结的这个检测方式就:是判断 __dirname 这个常量里面,是不是含有 app.asar 字样。在使用 electron-packager 打包后,根据是否使用 --asar 参数,打包出来的 release 包,是可能会出现两种情况的,一种是有 asar 的包,另外一种是没有 asar 包。但是,这种情况下,如果设置了 debug 变量的话,都应该是 false ,所以无法区分是否为 asar ,进而对第三方资源的调用产生影响。

苏南大叔:electron 如何区分是否为 asar 打包模式? - app
electron 如何区分是否为 asar 打包模式?(图4-3)

根据上一条目中的内容,苏南大叔推断:如果 __dirname 出现了 app.asar 的字样的话,那应该可以确认是属于 asar 模式了。否则,程序功能会是异常的。很有可能,程序本身都不应该能够运行起来。

苏南大叔:electron 如何区分是否为 asar 打包模式? - asar错误之mac
electron 如何区分是否为 asar 打包模式?(图4-4)

代码基本逻辑:如果是 asar 模式的话,就到 app.asar 上一层去寻找相关的第三方资源。代码类似如下:

newsn.net:这里是【评论】可见内容

所以判断是否是asar模式的标准就是:

newsn.net:这里是【评论】可见内容

相关文章

结论

electron 集成 swf 播放器绿色版,为什么打包之后就不能正常加载插件的谜团,是不是可以解开了呢?

更多 electron 的经验文字,请点击查看苏南大叔的博客文章:

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。