2020年10月21日星期三

创建Vue实例一:寻找 Vue 构造函数

前言:深入了解 Vue 源码的时候,new Vue() 创建一个 Vue 实例就是最好的入口。只要我们了解这个函数具体做了什么事情,也就对 Vue 的底层实现有了基础的了解。

寻找 Vue 构造函数

Vue 项目源码构建一个 Vue.js 版本,使用是 rollup,具体的 npm 脚本语句我们可以在项目根目录的 packjson.jsonscript 命令里面看到:

"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", "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 ", ...},

现在我们以 web 平台下的完整版构建,也就是 npm run dev 为切入点,对应的 script 命令就是:

"dev": "rollup -w -c scripts/config.js --environment TARGET:web-full-dev"

什么是完整版构建呢?完整版构建是相对于运行版构建而言的,两者关系可以用一个公式来描述:运行时版 + Compiler = 完整版

所以,完整版就是比运行时版多了一个 Compiler 编译的过程。那什么是 Compiler 编译呢?可以简单理解为字符串模板 template 编译为 render 渲染函数的这个过程。完整版的Vue是把这个过程放到了代码执行阶段,而运行时版则是放到了项目打包构建阶段。

我们学习源码当然要学习得更加全面为好,所以在这里选择完整版的构建去学习。

根据命令含义,我们在 scripts/config.js 文件里面找到:

'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},

最后,我们发现入口文件就是 web/entry-runtime-with-compiler.js。这个文件最后执行的代码是

export default Vue

这个就是我们能拿到的 Vue 构造函数。但是这不是终点,因为我们发现这个文件开头还有一句:

import Vue from './runtime/index'

说明 Vue 构造是从这个文件里面来的,我们继续进入这个文件去看,又发现:

import Vue from 'core/index'

继续到这个文件,又发现:

import Vue from './instance/index'

所以,还得继续到这个文件里面,到这里,我们终于发现 Vue 构造函数的定义了

function Vue (options) { if (process.env.NODE_ENV !== 'production' && !(this instanceof Vue) ) { warn('Vue is a constructor and should be called with the `new` keyword') } this._init(options)}

是不是有点失望,找了那么久,构造函数才这么点。

其实不是的,这个只是一开始的 Vue 构造函数,而在我们一路找来的那么多个 js 文件,都是在对这个 Vue 构造函数进行进一步的处理,一步一步处理后,在 web/entry-runtime-with-compiler.js 才得到我们开发者常见的 Vue 构造函数。

而这些 js 文件都具体对 Vue 构造函数做了什么呢,下面这张图可以简单的描述一下:

原文转载:http://www.shaoqun.com/a/481428.html

败欧洲网站:https://www.ikjzd.com/w/1555

谷歌趋势:https://www.ikjzd.com/w/397

赛兔:https://www.ikjzd.com/w/2375


前言:深入了解Vue源码的时候,newVue()创建一个Vue实例就是最好的入口。只要我们了解这个函数具体做了什么事情,也就对Vue的底层实现有了基础的了解。寻找Vue构造函数Vue项目源码构建一个Vue.js版本,使用是rollup,具体的npm脚本语句我们可以在项目根目录的packjson.json的script命令里面看到:"scripts":{"dev&quo
square:https://www.ikjzd.com/w/2106
netporter:https://www.ikjzd.com/w/2132
厦门有哪些美味菜肴?:http://tour.shaoqun.com/a/5684.html
2020年圣诞节深圳有哪些地方有打折活动?:http://tour.shaoqun.com/a/1182.html
2020年五一去江门旅游天气怎么样?适合游玩吗?:http://tour.shaoqun.com/a/1942.html

没有评论:

发表评论

跨境电商资讯:外贸宣传平台有哪些(出口的

现在很多做外贸的人都非常关注 外贸企业怎么推广 ,而现在推广的途径和平台有很多,企业如果都做,成本和时间精力是一个问题,而且并不是所有的推广渠道都是有用的。今天云程网络就来为大家盘点几个有效的外贸推广渠道。 一、海外社交媒体营销 Facebook,领英等海外社交媒体营销在近几年得...