赞
踩
仅供参考,以下内容为笔者解决问题的过程记录
技术栈:electron、react、nodeJs
需要实现的功能:存储聊天记录中的图片、视频到本地;当用户点击时,展示大图or播放视频
每次存储本地文件后,代码都会重新编译加载一次。
如果真是写入文件的方式有问题,那为什么之前发送图片的时候是好好的呢?
三个写入方式都没有问题,关键是看写入的内容,倘若是hello.txt那就没事,若是buffer格式就不行,就会导致重新编译。
stream.write写hello.txt也不行=》stream写入方式不行,尤其是开关流瞬间会重新编译。》重新编译,但应用不会白屏崩溃。即使真放在第一次存储代码块中运行,也不会导致白屏。
难道说,write(unit8array)就会白屏吗?果然是这样
为什么会这样呢?图片100kb太大了吗?
1、可能是buffer、unit8array格式不行
2、图片太大了,动辄最少几十kb
:哇哦!BEGIN THINK TOWARDS REAL REASON
即便是在he.txt中手动添加一个字,也会重新编译。用流写入也是这样吗?
为什么我即便是剪切一下也会重新编译呢?
难道说因为因为自己引用了这个路径,所以这个路径下东西稍微有变动,我就重新编译???
答:没错,因为用了require关键字,引入了路径,所以该路径下有变动,相当于源代码该变了,就会重新编译文件。
真的是相当于源代码改变了吗?源代码改变一般程序会返回到登录页面,我们试一试?
:新建或删除一个图片会导致页面刷新。但如果只是加了一个文字,虽然terminal也重新编译,但不会导致页面刷新。
难道是因为一个字所占字节数太小???
:不是的,只是增删字数,并不会触发页面刷新。看来,只有新建文件时,才会页面刷新。
:也可以理解,require关键字就像import一样,凡是被导入的依赖,都会作为源代码的一部分,所以这种行为是可以理解的。
写入图片为什么就不会导致崩溃?
:手动确实也会崩溃,但是好像真正发送图片的时候就不会崩溃?
:真正发送图片也会导致崩溃。
总结:使用require,使得视频存储文件夹路径,被当做第三方js库一样被引入进来,所以每次缓存新的视频到本地时,相当于第三方库代码改变了,因为热部署的缘故,代码被重新编译,所以屏幕出现了白屏!exactly
历时一个月多,当然也没有一直被这个问题卡着,我先跳过这个问题,过了几天再思考,失败,然后再次跳过…,这样反复几次后,终于现在柳暗花明了。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。