稀土掘金 稀土掘金

解决安卓webView白屏

      最近手上接到一个任务,webview项目在华为老款手机白屏了,一开始怀疑是js版本不兼容,某些语法没有做pollyfill,于是奔着这个方向,开了dev-server,进行调试,正常的流程不就是这样吗,可是当我在真机上访问开发服务的页面时,vconsole直接报语法错误“# SyntaxError: Use of const in strict mode”,检查获取到的chunk,发现chunk里面仍然会有es6的语法,const这些es6语法在起开发服务的过程中并没有被全部替换,这些es6语法在低版本浏览器肯定无法运行啊,这还怎么调试。 有关devserver产生的chunk为什么会存在es6语法点此查看相关文章,文中提到的解决方案是:

  1. 通过降级webpack-dev-server2.7.1版本
  2. 使用babel-loader时,在非生产环境配置中,额外指定对node_modules/webpack-dev-server/client/index.js脚本的转换       于是按照上面的教程,试了之后,发现还是不能排除es6语法,看来这个方向不好走啊, 后面我就采取另一个方案,先打生产包,然后借助http-server起一个开发服务,替代webpack的dev-server,尝试后发现不会有es6语法留存,也能正常访问。 此时再打开vconsole,看到的报错就是真实的生产环境遇到的错误了,vconsole中报的错误是 TypeError: Cannot read match of undefined然后是在打包混淆后的chunk文件中的具体的行号,但是并没有标注源码位置,尝试连接edge的inspect,控制台什么都不打印,这样根本不知道错在哪里,无法定位bug, 思考了很久还是觉得应该从source-map入手,于是配置了webapck,在打生产包的时候加上source-map文件,有了source-map文件,还需要手动去关联

屏幕截图 2022-01-12 155758.png       在pc端浏览器可以手动关联,但是在移动端似乎不可行,在查阅几篇文章后,我找到了一个利用报错信息和map文件直接显示源码位置的插件, 原文地址 插件地址 按照教程,我这边运行指令直接报错,最后把插件的源码打开,改造成js脚本,脚本如下

// Get file content
const sourceMap = require('source-map');
const path = require("path")
const fs = require("fs")
const readFile = function (filePath) {
  return new Promise(function (resolve, reject) {
    fs.readFile(filePath, {encoding:'utf-8'}, function(error, data) {
      if (error) {
        console.log(error)
        return reject(error);
      }
      resolve(JSON.parse(data));
    });
  });
};

// Find the source location
/**
 * 
 * @param {String} filePath 打包后的chunk文件对应的map文件的绝对路径
 * @param {Number} line 报错的行号
 * @param {Number} column 报错的列数
 * @returns 
 */
async function searchSource(filePath, line, column) {
  const rawSourceMap = await readFile(filePath)
  const consumer = await new sourceMap.SourceMapConsumer(rawSourceMap);
  const res = consumer.originalPositionFor({
    'line' : line,
    'column' : column
   });
   consumer.destroy()
   console.log(res);
  return res
}
 searchSource(path.resolve(__dirname,"build/static/js/2.794f4850.chunk.js.map"),2,38516)

      在node中执行,果然直接显示出源码的位置信息,最终定位到了bug,顺利解决了bug 上文中提到的那个插件已经不可用,我就想着在此基础上改造出一个新轮子,上传到npm,这也是一个很好的学习机会,嗯,造一些简单实用的轮子,是不是可以更容易进大厂呐。 经过改造的轮子使用方式:

1、全局安装 npm install find-source-location -g

2、 执行命令 fsl -p (map文件路径) -l (报错行号) -c (报错列数)

轮子github地址: gitee.com/guoyiao/fin…

玻璃钢生产厂家深圳大型商场美陈销售公司小猪玻璃钢雕塑栖霞商场入口美陈陕西方形玻璃钢花盆玻璃钢校园广场抽象看书人物雕塑甘肃玻璃钢面具雕塑商场美陈价钱浙江玻璃钢雕塑绵羊图片重庆玻璃钢商城广场美陈雕塑深圳季节性商场美陈供应商玻璃钢卡通人物雕塑制作商场美陈质量安全方案信阳哪里有玻璃钢雕塑厂家赤峰玻璃钢座椅雕塑新密泡沫玻璃钢仿铜雕塑厂家人物雕像玻璃钢雕塑定制玉米玻璃钢卡通雕塑定制石首玻璃钢十二生肖雕塑武汉定制玻璃钢雕塑优势好看的玻璃钢雕塑水性玻璃钢雕塑制作方法工艺玻璃钢人物雕塑批量定制大型主题商场美陈生产企业柳州玻璃钢塑料雕塑北湖玻璃钢造型雕塑杭州玻璃钢动物雕塑价格上海主题商场美陈报价洛阳优质玻璃钢彩绘雕塑制作标识玻璃钢彩绘雕塑琼中玻璃钢卡通人物雕塑工厂香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化