博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
「试着读读 Vue 源代码」工程目录及本地运行(断点调试)
阅读量:6571 次
发布时间:2019-06-24

本文共 3005 字,大约阅读时间需要 10 分钟。

说明

  • 首先这篇文章是读 vue.js 源代码的梳理性文章,文章分块梳理,记录着自己的一些理解及大致过程;更重要的一点是希望在 vue.js 3.0 发布前深入的了解其原理。

  • 如果你从未看过或者接触过 vue.js 源代码,建议你参考以下列出的 vue.js 解析的相关文章,因为这些文章更细致的讲解了这个工程,本文只是以一些 demo 演示某一功能点或 API 实现,力求简要梳理过程。

    • - 强烈推荐
  • 如果搞清楚了工程目录及入口,建议直接去看代码,这样比较高效 ( 遇到难以理解对应着回来看看别人的讲解,加以理解即可 )

  • 文章所涉及到的代码,基本都是缩减版,具体还请参阅 。

简单谈谈工程结构

上图简单介绍了整个 vue.js 的工程目录,我们关注的点:

  • 如何使 vue.js 跑起来,即本地运行(降低代码阅读难度)
  • 如何下手阅读,即找到我们所关心的入口(紧接着顺着思路往下走)

本地运行(断点调试)

首先找到 package.json

...  "scripts": {     "dev": "rollup -w -c scripts/config.js --environment TARGET:web-full-dev",     "dev:cjs": "rollup -w -c scripts/config.js --environment TARGET:web-runtime-cjs",     "dev:esm": "rollup -w -c scripts/config.js --environment TARGET:web-runtime-esm",     "dev:test": "karma start test/unit/karma.dev.config.js",     "dev:ssr": "rollup -w -c scripts/config.js --environment TARGET:web-server-renderer",     "dev:compiler": "rollup -w -c scripts/config.js --environment TARGET:web-compiler ",     "dev:weex": "rollup -w -c scripts/config.js --environment TARGET:weex-framework",     "dev:weex:factory": "rollup -w -c scripts/config.js --environment TARGET:weex-factory",     "dev:weex:compiler": "rollup -w -c scripts/config.js --environment TARGET:weex-compiler ",     "build": "node scripts/build.js",     "build:ssr": "npm run build -- web-runtime-cjs,web-server-renderer",     "build:weex": "npm run build -- weex",     "test": "npm run lint && flow check && npm run test:types && npm run test:cover && npm run              test:e2e -- --env phantomjs && npm run test:ssr && npm run test:weex",     "test:unit": "karma start test/unit/karma.unit.config.js",  },  ...复制代码

就本地运行、断点调试,我们只需关注 ”dev“ 选项;简单解释一下,npm run dev 执行 scripts/config.js 目标为 web-full-dev

config.js 简单介绍

const builds = {  ...  // Runtime+compiler development build (Browser)  'web-full-dev': {    entry: resolve('web/entry-runtime-with-compiler.js'),    dest: resolve('dist/vue.js'),    format: 'umd',    env: 'development',    alias: { he: './entity-decoder' },    banner  },  ...};function genConfig(name) {  const opts = builds[name]; // 映射目标配置  const config = {    input: opts.entry,    external: opts.external,    plugins: [...].concat(opts.plugins || []),    output: {      file: opts.dest,      format: opts.format,      banner: opts.banner,      name: opts.moduleName || 'Vue'    },    sourceMap: true // 为了更清晰调试代码,建议你开启  };  ...  return config;}if (process.env.TARGET) {  module.exports = genConfig(process.env.TARGET);}...复制代码
  • genConfig - config中添加 sourceMap: true, 为了能够在断点调试时,把代码映射到单文件内部。

  • 根据 package.json "dev" 映射知道了 web-full-dev 再由配置文件找到入口文件:entry: resolve('web/entry-runtime-with-compiler.js')

    • "web" 别名配置 - alias.js 查看实际映射为 web: resolve('src/platforms/web')
    • 最终锁定了入口文件:src/platforms/web/entry-runtime-with-compiler.js

执行代码并调试

  • 安装依赖: npm i | yarn

  • 运行: npm run dev | yarn dev

    • 运行后会在 dist 目录下生成两个文件 vue.js vue.js.map
  • 引入生成 vue.js 代码, demo 如下:

      
vue.js DEMO

{

{ message }}

复制代码

承接下文 -

转载于:https://juejin.im/post/5cf9b8da6fb9a07ed657c471

你可能感兴趣的文章
sql查询重复记录、删除重复记录方法大全
查看>>
hdu1711 Number Sequence
查看>>
js如何判断一组数字是否连续,得到一个临时数组[[3,4],[13,14,15],[17],[20],[22]];
查看>>
PHP利用memcache缓存技术提高响应速度
查看>>
python 多线程笔记(2)-- 锁
查看>>
EXT--表单AJax提交后台,返回前端数据格式的转换
查看>>
个人作品- 蘑菇大战
查看>>
protobuf使用错误总结
查看>>
Tomcat可以在eclipse里启动,可是不能訪问首页的问题
查看>>
QueryPerformanceFrequency使用方法--Windows高精度定时计数
查看>>
在Linux环境下安装和配置phpmyadmin
查看>>
Co-prime Array&&Seating On Bus(两道水题)
查看>>
该行已经属于另一个表 的解决方法
查看>>
linux下bus、devices和platform的基础模型 【转】
查看>>
如何优雅的使用RabbitMQ
查看>>
js json 对象相互转换
查看>>
jQuery中click事件多次触发解决方案
查看>>
java IO
查看>>
css3中定义required,focus,valid和invalid样式
查看>>
Spark history-server 配置 !运维人员的强大工具
查看>>