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

作为新人打包之后,必掉大坑之一。第三方资源的使用,总是出问题。比如:调用的第三方exe怎么找不到了啊?为啥注册表文件消失了啊?ffmpeg咋失效了啊?音乐视频为啥不能播放了啊?诸如此类的问题,很多。上述论点总是附带一个前提,那就是:"打包之后"。

那么,请问,打包的过程中,究竟发生了什么?您想过么?本文主要描述的是electron-packager如何正确处理第三方资源的打包问题,其它打包工具也是类似的。大家请仔细查看相关文档。

苏南大叔:electron-packager 如何正确处理第三方资源的打包问题 - asar打包
electron-packager 如何正确处理第三方资源的打包问题(图6-1)

作为苏南大叔推荐大家使用的electron打包工具,electron-packager的命令行模式,还是非常好用的。在本篇文字中,苏南大叔将要和大家分享的是:electron-packager的两个参数,--extra-resource--ignore。把这两个参数单独拿出来进行讨论的原因,还要从electron-packager--asar参数说起。

前言

大家都知道:electron的世界里面,有个asar的打包概念。体现在electron-packager上的话,就是--asar

electron-packager ./ --asar

asar可以把源码打包到一个文件里面,进而获得一定的代码加密和整合的效果。但是,默认情况下,这个asar里面的文件,是无差别的打包的。会把一些无用的文件打包进去,甚至一些额外的第三方程序。对于后者,第三方程序打包到asar之后,虽然代码逻辑层面还行得通。但是执行效果上,却报错了,无法找到这些第三方程序。具体的症状就是:开发的时候,一切正常。一旦打包(打包成asar),就报错了。

苏南大叔:electron-packager 如何正确处理第三方资源的打包问题 - asar
electron-packager 如何正确处理第三方资源的打包问题(图6-2)

当然,在这里,苏南大叔还要特别说明几句,就是:打包,可不一定有asar包的出现的。但是,对于大多数小白来说,asar包的出现是必然的。一旦出现了asar包,试图调用里面的第三方程序或资源的时候,就一定会报错。换句话说:打包只要不打asar包,一般不会有大问题。打了asar包,就一定要特别注意第三方资源的路径问题。

苏南大叔:electron-packager 如何正确处理第三方资源的打包问题 - asar_2
electron-packager 如何正确处理第三方资源的打包问题(图6-3)

extra-resourceignore

electron-packager使用了--asar参数的话,您就很可能需要这两个参数:ignoreextra-resource

  • ignore ,在将默认打包的范围内,排除掉一些不打包进去的。例如第三方资源文件,是无论如何,都不能打包到asar里面的。打包进去的话,或者没有用,占体积。或者影响程序逻辑实现,不能访问到这些第三方资源。
  • extra-resource,可以将第三方资源,在打包的时候,复制到app.asar的同级目录。

这两个参数的组合效果就是:把第三方资源文件,提升一个目录层级,从app.asar的内部,提升到app.asar的同级。

苏南大叔:electron-packager 如何正确处理第三方资源的打包问题 - 最终效果
electron-packager 如何正确处理第三方资源的打包问题(图6-4)

如果仅仅设置extra-resource,而不设置ignore的话,app.asar里面就会有一份多余的resource文件。具体见下图。

苏南大叔:electron-packager 如何正确处理第三方资源的打包问题 - 最终效果对比
electron-packager 如何正确处理第三方资源的打包问题(图6-5)

比如在上述例子中,没有设置ignore,app.asar的大小是54.7M,而设置了ignoreapp.asar的大小是6.7M。这差额就是res目录内的文件大小。所以,我们可以得出结论:ignore参数的设置,还是非常有必要的。

参数的使用范例

下面的例子中,第三方资源都存在于项目根目录下面的res文件夹中,我们希望把这个electron打包,并使用asar加密相关代码。

electron-packager ./ app --asar --ignore=res/ --extra-resource=res/

需要特别指明的是:如果要ignore的目录或文件,是很多个的话,直接在命令行里面,叠加很多个--ignore=即可。extra-resource也是类似的用法,直接在命令行里面,叠加很多个--extra-resource=即可。

苏南大叔:electron-packager 如何正确处理第三方资源的打包问题 - 同时操作多个目录
electron-packager 如何正确处理第三方资源的打包问题(图6-6)

相关内容

强烈建议您看完本文之后,阅读下面这篇配套文章:

总结

本文中,苏南大叔向大家展示了:在electron-packager中,如何利用--ignore--extr-resource,处理asar和第三方资源的问题。当然,不光electron-packager,使用其他的打包工具,比如electron-builder也是一样的问题,但是处理方案的细节,是不同的。

另外,通过这种方式打包的代码,对于第三方资源的调用时传递的路径,需要区分处理。因为调试时和打包成asar的时候,资源的位置已经发生了较大变化,具体的如何区别处理,请参照苏南大叔的这篇文字:

更多苏南大叔带来的electron系列教程,请参照如下链接:

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

 【福利】 腾讯云最新爆款活动!1核2G云服务器首年50元!

 【源码】本文代码片段及相关软件,请点此获取更多信息

 【绝密】秘籍文章入口,仅传授于有缘之人   electron    asar