浅谈vue+webpack项目调试方法步骤


Posted in Javascript onSeptember 11, 2017

题外话:这几个月用vue写了三个项目了,从绊手绊脚开始慢慢熟悉,婶婶的感到语言这东西还是得有点框框架架,太自由了容易乱搞,特别人多的时候。

从webpack开始

直接进入正题。有人觉得vue项目难调试,是因为用了webpack。所有代码揉在了一起,还加了很多框架代码,根本不知道怎么下手。所以vue+webpack调试要从webpack入手。我们先从一般情况开始说。

-sourcemap

webpack配置提供了devtool这个选项,如果设置为 ‘#source-map',则可以生成.map文件,在chrome浏览器中调试的时候可以显示源代码。

devtool: '#source-map'

然而这个设置实际上没这么简单。webpack官方给出了7个配置项供选择: 戳这里

浅谈vue+webpack项目调试方法步骤

这里不同的配置有些不同的效果,比如是否保留注释、保留行信息等,具体每一条什么意思这里不详解释,有兴趣的童鞋可以参考这篇文章

官方默认的是用 ‘#cheap-module-eval-source-map'

devtool: '#cheap-module-eval-source-map'

设置好之后,在vue项目调试的时候,代码里面标注debugger的时候就能看到对应的代码了,非常方便。

浅谈vue+webpack项目调试方法步骤

或者,直接找到对应的文件。在chrome用 'ctrl(command) + p‘,输入文件名,可以找到对应的源代码。

浅谈vue+webpack项目调试方法步骤

打断点:

浅谈vue+webpack项目调试方法步骤

需要注意的是,这里断点会打在下一行。同时一行代码运行在它的下一行才算执行。

-vue-cli

vue家的项目脚手架,推荐使用。vue-cli老家在这里

vue-cli可以帮我们自动搭建项目,首先npm全局安装

npm install -g vue-cli

然后创建一个新的项目

vue init webpack my-project

一路回车,搞定。(更多配置项请参考上面给出的vue-cli链接)

这里从网上下载了一个带webpack的vue项目(跑之前记得npm install一下)

浅谈vue+webpack项目调试方法步骤 

从bulid文件夹里面就大概能看出:

  • webpack.dev.conf: 开发模式用
  • webpack.prod.conf: 生产模式用

其中,开发模式提供了devtool为'#cheap-module-eval-source-map',生产模式根据config文件夹下的productionSourceMap变量控制是否使用。

若为true,则devtool为'#source-map'

其他使用方法一致。非常方便。

线上调试

平时开发的时候,我们用webpack的热加载,可以省去挂载调试的步骤,非常方便。但是发布后部署到服务器上,就失去了这个本地优势。

如果使用挂载文件方式会比较麻烦。由于webpack打出来的文件有版本号这些信息,而且发布一个包看代码量可能需要等待不等,这个方案不实际。但是如果挂载的是热加载到端口下的文件的话,这个问题就很好办了。

-热加载

在此之前,先来分析一下webpack的热加载原理。

对项目抓包可以发现这么一个文件:__webpack_hmr

浅谈vue+webpack项目调试方法步骤

这是webpack热加载的服务器推送事件,eventsource类型,功能和websocket有点类似。大致作用是建立一个不会停止的stream流链接,服务器发送更新数据回来append到流的末端,前端读取最新append的数据,然后动态的更新页面上的东西。

接下来我们观察下上文提到的更新数据有哪些。随便更新一个文件,触发热加载,再抓个包,发现有两个.hot-update.json和一个.hot-update.js文件

浅谈vue+webpack项目调试方法步骤

这些具体做了些啥我不知道,这里就不深究了。应该是根据json里面的数据,达到一个准确更新的效果。

所以热更新其实就是监听服务器上的数据,有修改的话服务器发送数据过来,前端把数据拿来后替换到页面上这么一个过程。

-AutoResponder

接下来谈谈线上挂载测试,这里推荐一款软件:fiddler

fiddler有一个功能叫做AutoResponder,它可以将一个地址指向另一个地址。之所以用这个软件,是因为它能匹配正则,非常方便。

浅谈vue+webpack项目调试方法步骤

上一节说到,webpack热加载用到了这几类文件

  • __webpack_hmr
  • xxxxxxxxxxx.hot-update.json
  • xxxxxxxxxxx.hot-update.js

和.html以及其他.js文件一起,我们就可以把这几个类型的文件挂载上去,达到一个远程热更新的效果,设置如下:

假设:

线上地址:http://192.168.9.189

本地服务器地址:http://localhost:8080/

为了照顾到接口,不能用*全匹配(上图fiddler里最后一条灰色的)

request matches respond with
EXACT:http://192.168.9.189/index.html http://localhost:8080/
EXACT:http://192.168.9.189/__webpack_hmr http://localhost:8080/__webpack_hmr
regex:http://192.168.9.189/([^.]+).js$ http://localhost:8080/$1.js
regex:http://192.168.9.189/(.+).hot-update.json$ http://localhost:8080/$1.hot-update.json
regex:http://192.168.9.189/(.+).hot-update.js$ http://localhost:8080/$1.hot-update.js

打开debugger就能发现vue的devtools出来了

wap端-技巧分享

手机上调试也没那么麻烦。和电脑一样在同一个局域网下,输入地址就能看到效果了。最近在做一个wap端的vue项目,这里谈谈一些自己用到的一些小技巧。

  • iphone可以用safari来检查元素;android可以用chrome远程调试
  • wifi下的http代理可以转发手机的网络请求,挂到本机上可以抓包数据

浅谈vue+webpack项目调试方法步骤

手机加载慢的时候,同样可以使用http代理转发到主机上,再访问速度就比较快了

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
通过身份证号得到出生日期和性别的js代码
Nov 23 Javascript
javascript 上下banner替换具体实现
Nov 14 Javascript
创建基于Bootstrap的下拉菜单的DropDownList的JQuery插件
Jun 02 Javascript
第五篇Bootstrap 排版
Jun 21 Javascript
VUE饿了么树形控件添加增删改功能的示例代码
Oct 17 Javascript
node简单实现一个更改头像功能的示例
Dec 29 Javascript
JS实现导出Excel的五种方法详解【附源码下载】
Mar 15 Javascript
Vue实现表格中对数据进行转换、处理的方法
Sep 06 Javascript
javascript面向对象程序设计实践常用知识点总结
Jul 29 Javascript
使用Angular material主题定义自己的组件库的配色体系
Sep 04 Javascript
Vue触发input选取文件点击事件操作
Aug 07 Javascript
vue使用openlayers实现移动点动画
Sep 24 Javascript
JS实现快速比较两个字符串中包含有相同数字的方法
Sep 11 #Javascript
node.js 利用流实现读写同步,边读边写的方法
Sep 11 #Javascript
checkbox:click事件触发span元素内容改变的方法
Sep 11 #Javascript
Node.js 使用流实现读写同步边读边写功能
Sep 11 #Javascript
node.js 核心http模块,起一个服务器,返回一个页面的实例
Sep 11 #Javascript
简单谈谈JS中的正则表达式
Sep 11 #Javascript
详解Vue双向数据绑定原理解析
Sep 11 #Javascript
You might like
2017年最好用的9个php开发工具推荐(超好用)
2017/10/23 PHP
javascript下IE与FF兼容函数收集
2008/09/17 Javascript
javascript showModalDialog 多层模态窗口实现页面提交及刷新的代码
2009/11/28 Javascript
Jquery实现带动画效果的经典二级导航菜单
2013/03/22 Javascript
js中的前绑定和后绑定详解
2013/08/01 Javascript
javascript实现客户端兼容各浏览器创建csv并下载的方法
2015/03/23 Javascript
JS操作XML实例总结(加载与解析XML文件、字符串)
2015/12/08 Javascript
Javascript基础_标记文字的实现方法
2016/06/14 Javascript
需灵活掌握的Bootstrap预定义排版类 你精通吗?
2016/06/20 Javascript
jQuery实现倒计时(倒计时年月日可自己输入)
2016/12/02 Javascript
JS获取指定月份的天数两种实现方法
2018/06/22 Javascript
Vue实现移动端左右滑动效果的方法
2018/11/27 Javascript
JS实现的字符串数组去重功能小结
2019/06/17 Javascript
element-ui 实现响应式导航栏的示例代码
2020/05/08 Javascript
[59:26]DOTA2上海特级锦标赛D组资格赛#1 EG VS VP第二局
2016/02/28 DOTA
[00:52]DOTA2齐天大圣预告片
2016/08/13 DOTA
详细解读Python的web.py框架下的application.py模块
2015/05/02 Python
讲解Python的Scrapy爬虫框架使用代理进行采集的方法
2016/02/18 Python
基于Python的接口测试框架实例
2016/11/04 Python
python pandas中DataFrame类型数据操作函数的方法
2018/04/08 Python
python启动应用程序和终止应用程序的方法
2019/06/28 Python
Pycharm中出现ImportError:DLL load failed:找不到指定模块的解决方法
2019/09/17 Python
在python里使用await关键字来等另外一个协程的实例
2020/05/04 Python
三陽商会官方网站:Sanyo iStore
2019/05/15 全球购物
Oral-B荷兰:牙医最推荐的品牌
2020/02/25 全球购物
澳大利亚Rockwear官网:女子瑜伽、健身和运动服
2021/01/26 全球购物
北京-环亚运商测试题.net程序员初步测试题
2013/05/28 面试题
个人贷款承诺书
2014/03/28 职场文书
学校师德承诺书
2014/05/23 职场文书
相亲活动方案
2014/08/26 职场文书
2014年世界艾滋病日宣传活动总结
2014/11/18 职场文书
2014年科研工作总结
2014/12/03 职场文书
会议开幕词
2015/01/28 职场文书
保险公司2016开门红口号集锦
2015/12/24 职场文书
解析redis hash应用场景和常用命令
2021/08/04 Redis
用JS创建一个录屏功能
2021/11/11 Javascript