浅谈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 相关文章推荐
使用jQuery全局事件ajaxStart为特定请求实现提示效果的代码
Dec 30 Javascript
jquery load事件(callback/data)使用方法及注意事项
Feb 06 Javascript
超级好用的jQuery圆角插件 Corner速成
Aug 31 Javascript
JQuery实现带排序功能的权限选择实例
May 18 Javascript
javascript实现粘贴qq截图功能(clipboardData)
May 29 Javascript
百度多文件异步上传控件webuploader基本用法解析
Nov 07 Javascript
Angularjs中三种数据的绑定策略(“@”,“=”,“&”)
Dec 23 Javascript
Vue2.0组件间数据传递示例
Mar 07 Javascript
基于vue实现多引擎搜索及关键字提示
Mar 16 Javascript
VUE axios上传图片到七牛的实例代码
Jul 28 Javascript
js实现加载页面就自动触发超链接的示例
Aug 31 Javascript
angular8.5集成TinyMce5的使用和详细配置(推荐)
Nov 16 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
很实用的一个完整email发送程序
2006/10/09 PHP
thinkphp3.0输出重复两次的解决方法
2014/12/19 PHP
php实现有趣的人品测试程序实例
2015/06/08 PHP
thinkPHP模板中函数的使用方法示例
2016/11/30 PHP
一个加密JavaScript的开源工具PACKER2.0.2
2006/11/04 Javascript
工作中常用到的JS表单验证代码(包括例子)
2010/11/11 Javascript
javascript 基础篇2 数据类型,语句,函数
2012/03/14 Javascript
简介AngularJS的HTML DOM支持情况
2015/06/17 Javascript
JavaScript sort数组排序方法和自我实现排序方法小结
2016/06/06 Javascript
Jquery实现上下移动和排序代码
2016/10/17 Javascript
javascript实现的图片预览功能
2017/03/25 Javascript
基于iScroll实现下拉刷新和上滑加载效果
2017/07/18 Javascript
JavaScript实现离开页面前提示功能【附jQuery实现方法】
2017/09/26 jQuery
详解webpack-dev-server使用方法
2018/09/14 Javascript
使用angular-cli webpack创建多个包的方法
2018/10/16 Javascript
JS开发常用工具函数(小结)
2019/07/04 Javascript
vue单页应用的内存泄露定位和修复问题小结
2019/08/02 Javascript
原生js实现随机点名
2020/07/05 Javascript
解决vue做详情页跳转的时候使用created方法 数据不会更新问题
2020/07/24 Javascript
JavaScript中作用域链的概念及用途讲解
2020/08/06 Javascript
Vue实现小购物车功能
2020/12/21 Vue.js
[01:30]2016国际邀请赛中国区预选赛神秘商店火爆开启
2016/06/26 DOTA
Python微信企业号开发之回调模式接收微信端客户端发送消息及被动返回消息示例
2017/08/21 Python
python调用百度语音识别实现大音频文件语音识别功能
2018/08/30 Python
Python mutiprocessing多线程池pool操作示例
2019/01/30 Python
浅谈pyqt5中信号与槽的认识
2019/02/17 Python
python 使用plt画图,去除图片四周的白边方法
2019/07/09 Python
瑞士灯具购物网站:Lampenwelt.ch
2018/07/08 全球购物
广州地球村科技数据库题目
2016/04/25 面试题
利用promise及参数解构封装ajax请求的方法
2021/03/24 Javascript
网络公司美工设计工作个人的自我评价
2013/11/03 职场文书
服装设计行业个人的自我评价
2013/12/20 职场文书
生产厂长岗位职责
2014/02/21 职场文书
大学生毕业个人总结
2015/02/15 职场文书
开会通知短信大全
2015/04/20 职场文书
大学学生会竞选稿
2015/11/19 职场文书