前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >论解决问题的“姿势”

论解决问题的“姿势”

作者头像
icepy
发布2019-06-24 17:35:24
7000
发布2019-06-24 17:35:24
举报
文章被收录于专栏:子曰五溪
“不要那么销魂,好不好?”

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

我遇到难题了,为此困惑了多日,解决不了,关于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. .spawn() executes the binary directly by default, just as .execFile()does. .execFile() actually uses .spawn() underneath. .spawn() only runs the input in a shell if the shell option is set.

Not supporting .spawn() means a lot of apps are not able to use ASAR as they need the more flexible .spawn() method. For example, I need the .spawn() method so I can stream the output of ffmpeg while it's running. .execFile() only buffers and reports at the end.

Would also make sense to support .spawnSync() for 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/#/ 添加到书签,值得拥有。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-01-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 子曰五溪 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
腾讯云区块链服务平台 TBaaS
腾讯云区块链服务平台(Tencent Blockchain as a Service,简称TBaaS)致力于打造全球领先的企业级区块链技术平台,帮助客户、开发者及合作伙伴轻松创建和管理可托管、可扩展的区块链网络,助力产业协同发展。TBaaS 支持长安链·ChainMaker、Hyperledger Fabric等区块链底层平台,简化部署、运维及开发流程,实现业务快速上链,提升链上治理效率。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档