编译打包vue_Vue 源码分析( 一 )

34880ef486c7a6d605aee5cff2fc26ed.png

Vue 源码分析( 一 )目录结构、版本、入口

1、Vue 源码目录结构

dist:打包之后生成的结果目录
examples:代码示例
scripts:配置文件
src:源代码目录compiler: 编译相关 (将template模板转换成render函数)core:核心components:定义了自带的 keep-alive 组件global-api:Vue内的静态方法instance:Vue构造函数、初始化、生命周期observer:响应式util:公共成员vdom:虚拟domplatforms:平台相关web:web 平台相关代码weex:app 相关代码server:服务端渲染代码sfc:将单文件组件转化为js对象
test:单元测试

2、Vue的不同构建版本

2a596c6119367c5efa055979a9d774f2.png
Vue 版本说明

说明

  • 完整版:同时包含 编译器运行时 的版本
  • 编译器:用于将模板字符串编译为 JavaScript 渲染函数的代码,体积大、效率低( 约3000行代码)
  • 运行时:用于创建 Vue 实例、渲染并处理虚拟DOM等的代码,体积小、效率高
  • UMD:UMD 版本通用的模板版本,支持多种模块方式,vue.js 默认文件就是运行时 + 编译器的 UMD 版本,可以在html中引入 vue.js 来使用
  • CommonJS(cjs):CommonJS 版本用来配合老的打包工具比如 Browserify 或 webpack 1
  • MS Module:从 2.6 开始 Vue 会提供两个 ES Modules(ESM),为现代打包工具提供的版本
  • ESM 格式被设计为可以被静态分析的,所以可以利用这一点进行 “tree-shaking”,并将用不到的代码排除出最终的包。
  • ES6 模块与 CommonJS 模块的差异 https://www.cnblogs.com/chenwenhao/p/12153332.html

运行时与编译器的区别

  • 运行时:由于此版本不包含编译器,所以无法使用 template 进行模板渲染
  • 编译器:将 template 转换成 render 函数,所以可以使用 template 或者 render 函数进行渲染

vue-cli 使用的 Vue 版本

  • 使用命令 vue inspect > output.js ( 非有效 webpack 配置文件 )
  • 在运行以上命令后,在 output.js 文件中的 resolve.alias.vue$ 配置为 "vue/dist/vue.runtime.esm.js" ($为webpack语法,精确匹配的意思)
  • 可以看出vue-cli 使用的是 运行时的 ESM 版本

3、入口文件

npm run dev
# "dev": "rollup -w -c scripts/config.js --sourcemap --environment TARGET:web-full-dev"
# -environment TARGET:web-full-dev 设置了环境变量 TARGET
  • 通过以上的命令,去 scripts/config.js 内查看 rollup 配置对象,可以看到 genConfig 方法返回了配置对象 config
/* 导出配置 */
if (process.env.TARGET) {module.exports = genConfig(process.env.TARGET)
} else {exports.getBuild = genConfigexports.getAllBuilds = () => Object.keys(builds).map(genConfig)
}
  • genConfig 方法内通过 builds[name]返回基础配置,在合并其他配置后返回最后的 config
function genConfig (name) {  // process.env.TARGET = "web-full-dev"const opts = builds[name]const config = {input: opts.entry,  // 入口文件位置...}...return config
}
  • 观察 builds ,定义各种 模式 和 环境 的入口、出口、模块化方式、模式等配置项
  • 入口配置项 entry,resolve('web/entry-runtime-with-compiler.js')
const builds = {'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},...
}
  • 通过 resolve 方法,返回当前模式的绝对路径, 并调用 path.resolve 方法合并 aliases[base] 和 p.slice(base.length + 1)
const aliases = require('./alias') // 拼装 web 的 绝对路径
const resolve = p => {// 根据路径中的前半部分去alias中找别名// p => web/entry-runtime-with-compiler.js      base => webconst base = p.split('/')[0]if (aliases[base]) {// __dirname + src/platforms/web + entry-runtime-with-compiler.jsreturn path.resolve(aliases[base], p.slice(base.length + 1))} else {return path.resolve(__dirname, '../', p)}
}
  • 通过 base === “web”,调用 resolve('src/platforms/web')
  • resolve 方法返回 path.resolve(__dirname, '../','src/platforms/web' ) 返回当前入口的绝对路径
const path = require('path')
const resolve = p => path.resolve(__dirname, '../', p)
module.exports = {vue: resolve('src/platforms/web/entry-runtime-with-compiler'),compiler: resolve('src/compiler'),core: resolve('src/core'),shared: resolve('src/shared'),web: resolve('src/platforms/web'),weex: resolve('src/platforms/weex'),server: resolve('src/server'),sfc: resolve('src/sfc')
}

查找到入口文件 srcplatformswebentry-runtime-with-compiler.js

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/369245.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

List 集合转换 json 字符串 ajax前台拼接

List 集合 转换为json 字符串public object Taoshow(){var i pbll.PackShow();//list集合var lida JsonConvert.SerializeObject(i); //转换成json字符串return lida;}function Tao() {$.ajax({url: "/Wangjie/Taoshow",type: "Get",dataType: "Jso…

【数论想法题】小C的问题 @科林明伦杯哈尔滨理工大学第八届程序设计竞赛...

Time Limit: 1000 MS Memory Limit: 256000 K Description 小C是一个可爱的女孩,她特别喜欢世界上最稳定的图形:三角形。有一天她得到了n根木棍,她把这些木棍随意的摆放成一行。小K来和小C玩,他发现了这排木棍,突然想…

使用grep4j轻松测试分布式组件上的SLA

因此,您的分布式体系结构如下图所示,您刚刚从企业那里收到了一项要求,以确保生产者发送并随后传输到下游系统(消费者)的消息的SLA必须快且永远不会慢于此。 400毫秒。 要求说: 从生产者发送到任何消费者的…

16进制颜色识别和搭配规律

在CSS中,经常会用到16进制的颜色来设置文本、背景、边框等颜色,但是对于一个纯前端来讲,16进制颜色的识别和搭配可能会较为陌生了 ,本文简单介绍一下16进制颜色的一些规律 16进制颜色的数值意义: 举个例子:比如 #1A2B…

iis服务器显示http1.1,IIS服务器“500”内部错误 HTTP/1.1 新建会话失败

IIS服务器“500”内部错误 访问asp :HTTP/1.1 新建会话失败1.重命名 %SystemRoot%\System32\Clbcatq.dll 为 %SystemRoot%\System32\~Clbcatq.dll2.重启动,删除注册表:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft下的com33.进入:cmd.exe进windows目录下输入:rd /s /q Registration …

Python+Appium环境搭建

1、python环境搭建,这里就不做过多介绍 2、安装 node.js 2.1、官网下载node.js:https://nodejs.org/en/download/ 2.2、获取到安装文件后,直接双击安装文件,根据程序的提示,完成nodejs的安装。 2.3、安装完成后&#x…

怎么弄出满屏幕的字_怎么把屏幕字体全部显示出来

2020-05-24阅读(30)本文主要为您介绍被别人用手机号买了票怎么办,内容包括别人用我的手机号,买了火车票怎么办,有人用我的手机号买了火车票怎么办,有人用我的手机号买了火车票怎么办。手机号被别人绑定买火车票了,可以将手机号直接…

为MongoDB定制Spring Social Connect框架

在上一篇文章中 ,我谈到了我面临的第一个挑战是更改数据模型并添加连接框架。 在这里,我想提供有关我如何做的更多细节。 Spring Social项目已经提供了基于jdbc的连接存储库实现,以将用户连接数据持久保存到关系数据库中。 但是,我…

跳槽上班第一天的感受

在上家公司呆了快三年,因为想从事与算法相关的工作,跳槽到了另一家公司,今天是上班的第一天,感觉不轻松也不紧张。有意无意的对比了两家公司的工作环境和工作方式,感觉差别是蛮大的,新的工作环境啥的都没有…

以空格为分隔符读取内容给两个变量_问与答61: 如何将一个文本文件中满足指定条件的内容筛选到另一个文本文件中?...

学习Excel技术,关注微信公众号:excelperfectQ:如下图1所示,一个名为“InputFile.csv”文件,每行有6个数字,每个数字使用空格分隔开。图1现在,我要将以60至69开头的行放置到另一个名为“OutputFi…

Chrome调试WebView时Inspect出现空白的解决方法(使用离线包不Fan墙)

起因 使用HTML5开发Android应用时,少不了调试WebView。做前端的还是习惯Chrome的开发者工具,以前都是输入Chrome://inspect就可以调试WebView了,太方便了。 最近老是出现空白页面,各种搜索,最后还是Fan墙解决了。好在…

BZOJ 1008:[HNOI2008]越狱

傻逼题&#xff0c;然后n&#xff0c;m写反了WA了一发。。 #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #include<cmath> #include<queue> #include<vector> typedef long long LL; using namespac…

2018年各大互联网前端面试题五(今日头条)

基础 行标签都有哪些&#xff1f;特点&#xff1f;img标签的用法请描述一下cookies&#xff0c;sessionStorage和localStorage的区别&#xff1f;一个div&#xff0c;高度是宽度的50%&#xff0c;让该div的宽度占据整个屏幕&#xff0c;然后能自适应&#xff0c;垂直居中&#…

属性被分为八大类不包括_Python语言---私有属性

属性分为实例属性与类属性方法分为普通方法&#xff0c;类方法&#xff0c;静态方法一&#xff1a;属性&#xff1a;尽量把需要用户传入的属性作为实例属性&#xff0c;而把同类都一样的属性作为类属性。实例属性在每创造一个实例时都会初始化一遍&#xff0c;不同的实例的实例…

CSS 文本溢出时显示省略标记

如标题所示... <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns"http://www.w3.org/1999/xhtml"> <head> <meta http-equiv"Content…

Jenkins分层作业和作业状态汇总

您可能知道&#xff0c;Jenkins是高度可配置的CI服务器。 我们可以设置不同的自定义构建过程。 我将分享一些我用来设置Jenkins工作层次的方法。 这是用例&#xff1a; 我们有一个主入口作业被调用以启动整个构建过程。 这项工作可以有一个到多个子工作。 &#xff08;第2级&…

【Python Programe】WSGI (Web Server Gateway Interface)

Part1: What is a Web server? 一个位于物理服务器上的网络服务器&#xff08;服务器里的服务器&#xff09;&#xff0c;等待客户端去发送request&#xff0c;当服务器接收到request&#xff0c;就会生成一个response发送回客户端&#xff1b; 客户端与服务器使用HTTP协议进…

Redis配置文件配置

Spring和Redis整合&#xff1a; 配置applicationContext-redis.xml&#xff0c;添加Redis服务&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <beans xmlns"http://www.springframework.org/schema/beans"xmlns:context"ht…

华大单片机m4内核的滴答定时器_微处理器、单片机及其外设,处理还是控制?...

每项新应用设计都需要一个单片机或微处理器。当在两者之间选择其一时&#xff0c;需要考虑一些因素。以下是微处理器、单片机以及异构架构的概述。考虑选择微处理器(MPU)或者单片机(MCU)时&#xff0c;应用类型通常是关键因素。另一方面&#xff0c;最终选择取决于诸如操作系统…

option标签selected=selected属性失效的问题

要在select标签上面加上autocomplete"off"关闭自动完成&#xff0c;不然浏览器每次刷新后将自动选择上一次关闭时的option&#xff0c;这样默认属性selected"selected"就会失效啦 要记住每次遇到select标签时就最好要加上autocomplete"off"这一项…