Vue3.x源码调试的实现方法


Posted in Javascript onOctober 13, 2019

几句话说下我看源码的方式

断点调试

根据demo小例子或者api的使用姿势进行调试,每个小例子只关心其走过的逻辑分支。

如何调试vue3.x的ts源码

  • 官网说使用 yarn dev 命令就可以对其进行调试,可是运行该命令后,是生成过后的代码,不能对其编写的ts源码进行调试。
  • 其实再生成对应的sourcemap文件,便可以原汁原味的调试。
  • 先看下几个截图:

Vue3.x源码调试的实现方法 

Vue3.x源码调试的实现方法

如果这是你想要的调试效果,下面请看下如何生成sourcemap文件。

生成sourcemap文件

rollup.js中文文档

// rollup.config.js
export default {
 // 核心选项
 input,   // 必须
 external,
 plugins,

 // 额外选项
 onwarn,

 // danger zone
 acorn,
 context,
 moduleContext,
 legacy

 output: { // 必须 (如果要输出多个,可以是一个数组)
  // 核心选项
  file,  // 必须
  format, // 必须
  name,
  globals,

  // 额外选项
  paths,
  banner,
  footer,
  intro,
  outro,
  sourcemap,
  sourcemapFile,
  interop,

  // 高危选项
  exports,
  amd,
  indent
  strict
 },
};

可以看到output对象有个sourcemap属性,其实只要配置上这个就能生成sourcemap文件了。 在vue-next项目中的rollup.config.js文件中,找到createConfig函数

function createConfig(output, plugins = []) {
 const isProductionBuild =
  process.env.__DEV__ === 'false' || /\.prod\.js$/.test(output.file)
 const isGlobalBuild = /\.global(\.prod)?\.js$/.test(output.file)
 const isBunlderESMBuild = /\.esm\.js$/.test(output.file)
 const isBrowserESMBuild = /esm-browser(\.prod)?\.js$/.test(output.file)

 if (isGlobalBuild) {
  output.name = packageOptions.name
 }

 const shouldEmitDeclarations =
  process.env.TYPES != null &&
  process.env.NODE_ENV === 'production' &&
  !hasTSChecked

 const tsPlugin = ts({
  check: process.env.NODE_ENV === 'production' && !hasTSChecked,
  tsconfig: path.resolve(__dirname, 'tsconfig.json'),
  cacheRoot: path.resolve(__dirname, 'node_modules/.rts2_cache'),
  tsconfigOverride: {
   compilerOptions: {
    declaration: shouldEmitDeclarations,
    declarationMap: shouldEmitDeclarations
   },
   exclude: ['**/__tests__']
  }
 })
 // we only need to check TS and generate declarations once for each build.
 // it also seems to run into weird issues when checking multiple times
 // during a single build.
 hasTSChecked = true

 const externals = Object.keys(aliasOptions).filter(p => p !== '@vue/shared')

 output.sourcemap = true // 这句话是新增的
 return {
  input: resolve(`src/index.ts`),
  // Global and Browser ESM builds inlines everything so that they can be
  // used alone.
  external: isGlobalBuild || isBrowserESMBuild ? [] : externals,
  plugins: [
   json({
    namedExports: false
   }),
   tsPlugin,
   aliasPlugin,
   createReplacePlugin(
    isProductionBuild,
    isBunlderESMBuild,
    isGlobalBuild || isBrowserESMBuild
   ),
   ...plugins
  ],
  output,
  onwarn: (msg, warn) => {
   if (!/Circular/.test(msg)) {
    warn(msg)
   }
  }
 }
}

加上一句output.sourcemap = true即可。 然后运行 yarn dev,可以看到vue/dist/vue.global.js.map文件已生成。 再然后你在xxx.html通过script的方式引入vue.global.js文件,即可调试, 效果如上图。

弱弱的说一句,我对ts和rollup.js不熟,几乎陌生,但是不影响学习vue3.x源码。 vue3.x的源码这次分几个模块编写的,所以学习也可以分模块学习,比如学习响应式系统,运行yarn dev reactivity命令生成对应文件,然后配合__tests__下的案列,自己进行调试学习。(额,好像说了好几句...)

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

Javascript 相关文章推荐
javascript动画效果类封装代码
Aug 28 Javascript
关于jQuery的inArray 方法介绍
Oct 08 Javascript
非jQuery实现照片散落桌子上,单击放大的LightBox效果
Nov 28 Javascript
JavaScript数组实现数据结构中的队列与堆栈
May 26 Javascript
Select下拉框模糊查询功能实现代码
Jul 22 Javascript
关于AngularJs数据的本地存储详解
Jan 20 Javascript
JS实现的点击表头排序功能示例
Mar 27 Javascript
BootStrap selectpicker后台动态绑定数据的方法
Jul 28 Javascript
jQuery插件jsonview展示json数据
May 26 jQuery
vue 界面刷新数据被清除 localStorage的使用详解
Sep 16 Javascript
json字符串对象转换代码实例
Sep 28 Javascript
electron-vue开发环境内存泄漏问题汇总
Oct 10 Javascript
使用webpack将ES6转化ES5的实现方法
Oct 13 #Javascript
vue中uni-app 实现小程序登录注册功能
Oct 12 #Javascript
Jquery 动态添加元素并添加点击事件实现过程解析
Oct 12 #jQuery
微信小程序 scroll-view 水平滚动实现过程解析
Oct 12 #Javascript
微信小程序iOS下拉白屏晃动问题解决方案
Oct 12 #Javascript
vue中添加与删除关键字搜索功能
Oct 12 #Javascript
jquery 遍历hash操作示例【基于ajax交互】
Oct 12 #jQuery
You might like
php-cli简介(不会Shell语言一样用Shell)
2013/06/03 PHP
thinkPHP简单调用函数与类库的方法
2017/03/15 PHP
PHP的curl函数的用法总结
2019/02/14 PHP
基础的prototype.js常用函数及其用法
2007/03/10 Javascript
JavaScript中的Document文档对象
2008/01/16 Javascript
获取HTML DOM节点元素的方法的总结
2009/08/21 Javascript
js兼容的placeholder属性详解
2013/08/18 Javascript
SinaEditor使用方法详解
2013/12/28 Javascript
JS获取随机数函数可自定义最小值最大值
2014/05/08 Javascript
jQuery修改class属性和CSS样式整理
2015/01/30 Javascript
javascript实现简易计算器
2017/02/01 Javascript
CodeMirror js代码加亮使用总结
2017/03/25 Javascript
微信小程序页面传值实例分析
2017/04/19 Javascript
原生js轮播特效
2017/05/18 Javascript
详解VueJs前后端分离跨域问题
2017/05/24 Javascript
vue src动态加载请求获取图片的方法
2018/10/17 Javascript
vue路由--网站导航功能详解
2019/03/29 Javascript
[03:52]DOTA2英雄基础教程 酒仙
2013/12/23 DOTA
django自带的server 让外网主机访问方法
2018/05/14 Python
Python中偏函数用法示例
2018/06/07 Python
对pandas写入读取h5文件的方法详解
2018/12/28 Python
Python设计模式之享元模式原理与用法实例分析
2019/01/11 Python
Python基于滑动平均思想实现缺失数据填充的方法
2019/02/21 Python
Flask框架学习笔记之表单基础介绍与表单提交方式
2019/08/12 Python
Python 合并多个TXT文件并统计词频的实现
2019/08/23 Python
Python unittest工作原理和使用过程解析
2020/02/24 Python
使用Python文件读写,自定义分隔符(custom delimiter)
2020/07/05 Python
Peter Millar官网:美国高档生活服饰品牌
2018/07/02 全球购物
Java面试题汇总
2015/12/06 面试题
教师演讲稿范文
2014/01/08 职场文书
竞聘演讲稿精彩开头和结尾
2014/05/14 职场文书
大学团日活动新闻稿
2014/09/10 职场文书
初中生考试作弊检讨书
2014/12/14 职场文书
2015年五一劳动节活动总结
2015/02/09 职场文书
综治目标管理责任书
2015/05/11 职场文书
vue 数字翻牌器动态加载数据
2022/04/20 Vue.js