论解决问题的“姿势”

“不要那么销魂,好不好?”

“小明说:我搞不定啊,搞不定啊!”

我遇到难题了,为此困惑了多日,解决不了,关于Electron在ASAR包中可以使用二进制文件的问题,这个问题解决起来非常的痛苦,但还是得去解决,找办法。

我能想到的第一个办法,官方文档都快被我翻烂了,Google搜来搜去,说是可以在package.json文件中配置asar:false来关闭ASAR,试了试还是没解决问题。虽然开发版可以用,但是如果build过后,安装版本需要验证的签名过不去,而且问题依然没有解决。

第二步,是去官方仓库提交issues:https://github.com/electron/electron/issues/11566,找人帮忙找这方面的专家求教,或去比较知名的社区提交问题https://cnodejs.org/topic/5a557d0eafa0a121784a8ad0,看看有没有其他人遇到同样的问题,并且能解决了。不过,很大程度上,依然需要依赖自己去解决问题,等了很多天还是没有人回答。

感谢狼叔及时帮我去找人看这个问题,看来此路行不通了,咋搞呢?

那么,我先试试硬编码的方式,根据不同的操作系统来替换不同的路径,暂时先拿去测试(捂脸,这不是忽悠人嘛),Mac 10.13.1 ,Mac 10.13.2 可用。

今天在Electron仓库里终于搜索出来一些有价值的信息了:

There are Node APIs that can execute binaries like child_process.exec, child_process.spawn and child_process.execFile, but only execFile is supported to execute binaries inside asar archive.

This is because exec and spawn accept command instead of file as input, and commands are executed under shell.

https://github.com/electron/electron/blob/master/docs/tutorial/application-packaging.md#executing-binaries-inside-asar-archive

This is not entirely correct.executes the binary directly by default, just asdoes.actually usesunderneath.only runs the input in a shell if theoption is set.

Not supportingmeans a lot of apps are not able to use ASAR as they need the more flexiblemethod. For example, I need themethod so I can stream the output ofwhile it's running.only buffers and reports at the end.

Would also make sense to supportfor completeness.

https://github.com/electron/electron/issues/9459

https://github.com/electron/electron/issues/9459

大意就是说在ASAR机制下,如果要使用二进制文件,spawn是无法支持的,暂时提供一个临时修复的方式,是的!和我那个办法一样,硬编码。

exports.fixPathForAsarUnpack = path => exports.isUsingAsar ? path.replace('app.asar', 'app.asar.unpacked') : path;

又回来了,nw市场原来是这样推荐来的?是的,社区的朋友们都推荐用nw.js来解决这个问题,问题是,我基于electron基本写完这个事情了啊!! 欲哭无泪有没有?

如果是你,遇到了难题,该如何解决?方式是否和我一样,还是苦苦等待别人帮你解决?其实这就是一种“姿势”的不同,与其等待,不如主动出击,当然也可以期待别人能帮你解决,至少这样能节省很多时间,同时,自己也要有一个迎难而上的心态,上吧,怕猫?你都选择当了程序员,这么恐怖的职业都上了,还怕这一两个难题?

从我解决的思路来看Google对于广大技术同胞的重要性,社区在我们的心里一定要有重要的指导,比如你能及时的提交issues,如果能直达作者,那么就能很快得到解决方案了,当然,提交issues应该是最后一步。如果前面,在Google能搜索出来,咱们还是不要去打扰作者的好,我们应该要自己主动,或者也思考一下,这个设计为什么会这样,要解决什么问题,会产生什么问题。说不定,你还能给知名的项目提交一两个PR。

最后推荐自己做的小工具,有兴趣的可以申请,https://github.com/icepy/blockchain-navigate-code/issues/1,当然,看心情通过。另外要学习区块链技术的朋友,可以将https://icepy.me/blockchain-navigate/#/添加到书签,值得拥有。

如果这些分享对你有用,支持打赏:

DdzFFzCqrhssiX2gAn17QNegNvSEixGi5RtgmEqeNrghMnU3F6GbmD1SWA3ZEKkTCuYnMnXTTpwWZrJpfxxiaLwg1Fm4p5z5WeyQWmbB

0x4A40Eb870DcF533D4dC097c3d87aaFE9f64490A1

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180111G00KM600?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券