最新要闻
- 【时快讯】《满江红》中国影史票房榜第6:力压《唐人街探案3》 票房突破45.23亿
- 环球即时:2023开门红!长四丙成功发射“一箭双星”
- 环球消息!第一批PCIe 5.0 SSD都是残血!14GB/s满血版还早呢
- 世界快资讯丨有了ChatGPT 动动嘴就能使唤Excel:我的童年梦想实现了
- 每日热门:8岁男孩单手打破汉诺塔世界纪录:4.305秒搞定4层
- 当前头条:海绵宝宝卡通图片线条图_海绵宝宝卡通图片
- 天生要完美电视剧28集完整版_天生要完美电视剧
- 孙海洋夫妇餐饮公司被列经营异常:本人回应
- 今日报丨香港男子深圳上班每天通勤4小时:月薪3万 每天通勤费用80元
- 当前观察:大获成功!《最后生还者》成史上收视率最高的游戏改编剧
- 爆款椰子鞋停售后:阿迪在中国凉凉了
- 1.3kg下颜值、性能、屏幕全给你!华硕灵耀14 2023评测:续航惊人
- 观热点:长城汽车发布Hi4全新新能源技术:4驱享受 2驱能耗
- 全球关注:杠上比亚迪秦PLUS DM-i 新款日产轩逸上市:9.98万起
- 8GB、16GB显存的性能差多少?实测多达172%!
- AMD最强核显跑分上来了!但是还打不过GTX 1650 Ti
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
Vue————Vue v2.7.14 入口文件【二】
(资料图片)
前言
按着我的习惯,拿到一个项目首先我会查看项目下的README.md
其次查看package.json
,这里也不例外看过 README.md 后,来看下package.json
;GitHubgithub page
内容
package.json
vue package.json 字段解释
这里我一般只关注
script
部分,从这里我们再抽丝剥茧。
"scripts": { "dev": "rollup -w -c scripts/config.js --environment TARGET:full-dev", "dev:cjs": "rollup -w -c scripts/config.js --environment TARGET:runtime-cjs-dev", "dev:esm": "rollup -w -c scripts/config.js --environment TARGET:runtime-esm", "dev:ssr": "rollup -w -c scripts/config.js --environment TARGET:server-renderer", "dev:compiler": "rollup -w -c scripts/config.js --environment TARGET:compiler ", "build": "node scripts/build.js", "build:ssr": "npm run build -- runtime-cjs,server-renderer", "build:types": "rimraf temp && tsc --declaration --emitDeclarationOnly --outDir temp && api-extractor run && api-extractor run -c packages/compiler-sfc/api-extractor.json", "test": "npm run ts-check && npm run test:types && npm run test:unit && npm run test:e2e && npm run test:ssr && npm run test:sfc", "test:unit": "vitest run test/unit", "test:ssr": "npm run build:ssr && vitest run server-renderer", "test:sfc": "vitest run compiler-sfc", "test:e2e": "npm run build -- full-prod,server-renderer-basic && vitest run test/e2e", "test:transition": "karma start test/transition/karma.conf.js", "test:types": "npm run build:types && tsc -p ./types/tsconfig.json", "format": "prettier --write --parser typescript \"(src|test|packages|types)/**/*.ts\"", "ts-check": "tsc -p tsconfig.json --noEmit", "ts-check:test": "tsc -p test/tsconfig.json --noEmit", "bench:ssr": "npm run build:ssr && node benchmarks/ssr/renderToString.js && node benchmarks/ssr/renderToStream.js", "release": "node scripts/release.js", "changelog": "conventional-changelog -p angular -i CHANGELOG.md -s" }
根据上面的一些运行命令,我们可以看到 vue 的 dev 是使用rollup来进行打包的,这时候我们直接看dev
命令对应的配置文件(scripts/config.js
)里面有些什么。
初入 VUE | 寻找入口
- 进入后我们根据命令参数
full-dev
进行搜索,会发现以下代码;
// Runtime+compiler development build (Browser) "full-dev": { entry: resolve("web/entry-runtime-with-compiler.ts"), dest: resolve("dist/vue.js"), format: "umd", env: "development", alias: { he: "./entity-decoder" }, banner },
- 点击 resolve 进行跳转,跳转到 resolve 函数下;
const aliases = require("./alias")const resolve = p => { const base = p.split("/")[0] if (aliases[base]) { return path.resolve(aliases[base], p.slice(base.length + 1)) } else { return path.resolve(__dirname, "../", p) }}
- 根据上方的代码,我们再跳转到引入 alias 文件中,这时候不难发现 vue 对应的入口文件是
src/platforms/web/entry-runtime-with-compiler
;
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"), server: resolve("packages/server-renderer/src"), sfc: resolve("packages/compiler-sfc/src")}
- vue 入口代码内容
import Vue from "./runtime-with-compiler"import * as vca from "v3"import { extend } from "shared/util"extend(Vue, vca)import { effect } from "v3/reactivity/effect"Vue.effect = effectexport default Vue
深入 VUE | 深度挖掘
既然都找到 vue 的入口文件,那我们肯定是要继续挖掘的!
- 寻找根源
点击
import Vue from "./runtime-with-compiler"
引入文件进行跳转,来到runtime-with-compiler.ts
import config from "core/config"import { warn, cached } from "core/util/index"import { mark, measure } from "core/util/perf"import Vue from "./runtime/index"import { query } from "./util/index"import { compileToFunctions } from "./compiler/index"import { shouldDecodeNewlines, shouldDecodeNewlinesForHref} from "./util/compat"import type { Component } from "types/component"import type { GlobalAPI } from "types/global-api"
- 再次跳转
根据
import Vue from "./runtime/index"
的引用,我们可以知道还需要再次跳转runtime/index.ts
import Vue from "core/index"import config from "core/config"import { extend, noop } from "shared/util"import { mountComponent } from "core/instance/lifecycle"import { devtools, inBrowser } from "core/util/index"
- 三次跳转
好东西果然藏得比较深,根据
import Vue from "core/index"
的引用,跳转到core/index
import Vue from "./instance/index"import { initGlobalAPI } from "./global-api/index"import { isServerRendering } from "core/util/env"import { FunctionalRenderContext } from "core/vdom/create-functional-component"import { version } from "v3"
- 四次跳转
我感觉下面就是见证奇迹的时刻了,来吧! 根据
import Vue from "./instance/index"
的引用,跳转到./instance/index.ts
import { initMixin } from "./init"import { stateMixin } from "./state"import { renderMixin } from "./render"import { eventsMixin } from "./events"import { lifecycleMixin } from "./lifecycle"import { warn } from "../util/index"import type { GlobalAPI } from "types/global-api"function Vue(options) { if (__DEV__ && !(this instanceof Vue)) { warn("Vue is a constructor and should be called with the `new` keyword") } this._init(options)}//@ts-expect-error Vue has function type//初始化混入 | _initinitMixin(Vue)//@ts-expect-error Vue has function type// 状态混入 | $set,$delete,$watchstateMixin(Vue)//@ts-expect-error Vue has function type// 事件混入 | $on $once $off $emiteventsMixin(Vue)//@ts-expect-error Vue has function type// 生命周期混入 | _update $forceUpdate $destroylifecycleMixin(Vue)//@ts-expect-error Vue has function type// 渲染混入 | $nextTick,_renderrenderMixin(Vue)export default Vue as unknown as GlobalAPI
经过了四次的跳转,我们终于到达了传说中的隐秘之地,首先判断如果是开发环境,且不是通过 new 关键字来进行调用的话,就会在控制台打印一个 warning,之后调用了 this._init(options)函数。
关键词:
-
世界速递!day05-功能实现04
功能实现04后端:https: github com liyuelian furniture-back-end git前端:https: github com liyuelian furnit
来源: 世界速递!day05-功能实现04
Vue————Vue v2.7.14 入口文件【二】
【时快讯】《满江红》中国影史票房榜第6:力压《唐人街探案3》 票房突破45.23亿
环球即时:2023开门红!长四丙成功发射“一箭双星”
环球消息!第一批PCIe 5.0 SSD都是残血!14GB/s满血版还早呢
世界快资讯丨有了ChatGPT 动动嘴就能使唤Excel:我的童年梦想实现了
每日热门:8岁男孩单手打破汉诺塔世界纪录:4.305秒搞定4层
当前头条:海绵宝宝卡通图片线条图_海绵宝宝卡通图片
天生要完美电视剧28集完整版_天生要完美电视剧
对C++做爬虫的代码进行简单分析
世界热推荐:2.HelloSpring
孙海洋夫妇餐饮公司被列经营异常:本人回应
今日报丨香港男子深圳上班每天通勤4小时:月薪3万 每天通勤费用80元
【全球独家】63.C++类型转换
世界今亮点!python可变长参数
当前观察:大获成功!《最后生还者》成史上收视率最高的游戏改编剧
爆款椰子鞋停售后:阿迪在中国凉凉了
1.3kg下颜值、性能、屏幕全给你!华硕灵耀14 2023评测:续航惊人
观热点:长城汽车发布Hi4全新新能源技术:4驱享受 2驱能耗
全球关注:杠上比亚迪秦PLUS DM-i 新款日产轩逸上市:9.98万起
8GB、16GB显存的性能差多少?实测多达172%!
明解数据库------数据库存储演变史
AMD最强核显跑分上来了!但是还打不过GTX 1650 Ti
全球最新:买丰田bZ4X电动车 送一辆威驰轿车?4S店回应:活动属实
RTX 30公版显卡突然集体消失!刚刚降价40%
微头条丨公司规定不接董事长电话1次罚10000元 员工:试岗1天就走了
【全球快播报】校友承诺捐赠1100万元却不兑现被告 学校:他具备履约能力
紧跟微信步伐:支付宝掌纹支付设备外观专利获授权
【天天快播报】搅局中端市场!一加Ace2V评测:将16G满血内存进行到底
通讯!破壁机虚标功率后 疯狂小杨哥带货又翻车:面霜因虚假宣传被罚
《王者荣耀》出海“首战告捷”:登顶巴西免费游戏榜
环球报道:记录--vue3+setup+ts 知识总结
【世界速看料】程序员养发神器:拒绝加班熬夜,告别秃头!
【世界聚看点】【希尔排序ShellSort算法详解】Java/Go/Python/JS/C不同语言实现
环球微头条丨【分享贴】项目中为啥总是项目经理一人干着急?
使用PostgreSQL而不是MySQL存储中型数据有什么好处?
3000块多品牌SSD质量大PK:整体比机械硬盘可靠
玩家购入二手Switch主机:可是被卖家坑惨了
航班晚点1小时 机长提速提前20分钟到达帮助乘客换机?山航回应
每人1600元!北京发放首批“京彩·绿色”消费券:买手机PC都能用
当前热文:涉及121万辆!我国2022年新能源汽车召回量创历史新高:电池、电机缺陷多
环球最资讯丨暴风的恋人百度云_暴风的恋人
有监督学习——线性回归
禁用XXE处理漫谈
腾讯-广点通转化归因
来真的!贾跃亭:3月30日生产FF91 百万豪车来了
【天天新视野】30个汽车品牌降价 成都发放消费券:满40万可减8000元
【世界独家】华硕发布TUF Gaming M3 Gen II鼠标:仅重59g、IP56防尘防水
全球今亮点!过期1天的食物还能吃吗?
日系中的另类!国产马自达CX-50内饰发布:原汁原味引入海外版
加速资源整合,星纪魅族围绕手机、XR、前瞻技术拓展智能生态
Prompt-Engineering-Guide 学习摘要2
今日关注:电动汽车综合检测
观焦点:这几个群,程序员可千万不要进!
每日快讯!12万元买宝马“3系”?宝马中国回应降价传闻:指导价没变
当前快讯:玩家不满《魔戒:咕噜》新宣传片:他没有主角光环!
环球热讯:小米搞出“新花样”:可层叠摄像模组专利获授权
焦点快报!没有秘密了!AI或能够读取大脑重现梦境
今日快看!新老代表接力提建议将牡丹定为国花:100多个国家都有国花了
【天天报资讯】山西李家大院哪些人可以享受半价票优惠
环球新资讯:【机器学习】1. 广义线性模型
【世界新视野】密码学报如何正确Latex投稿?
环球今亮点!快 40 岁,刚被裁。。
金三银四每天一个.NET基础知识巩固(一)
今日要闻!从“13 天”到“0 天”延时,揭秘火山引擎 DataLeap SLA 保障最佳实践
世界热消息:谷歌报复性砸出5620亿参数大模型:比ChatGPT更恐怖 学术圈已刷屏
【环球播资讯】2月国产游戏出海成绩出炉:《原神》获收入和增长双料冠军
Nginx http 文件服务器 中文名称文件乱码以及不能访问下载问题 (解决全过程)
有关马的歇后语有哪些?有关马的古诗有哪些?
工科理科化现象亟待扭转!曹德旺等科学家企业喊话让学生去工厂一线真问题
【世界时快讯】委员喊话农村淘汰、封杀老头乐 网友吵翻:揭秘观点背后让人唏嘘?
隐婚男女的结局是什么?隐婚男女演员介绍
小学二年级班主任工作计划有哪些?小学二年级家长会发言稿
消防逃生的注意事项有哪些?消防逃生演练总结
旅游可持续发展的实质是什么?旅游可持续发展论文模板
英语六级考试时间安排分配是什么?英语六级考试题型简介
世界热头条丨虼蚤的读音是什么_虼蚤
描写景色的词语集锦有哪些?描写景色的段落摘抄
梁祯元为什么叫南韩贾宝玉?梁祯元为什么是队长?
中国相术十二宫都有哪些?相术十二宫实用顺口溜
田宅宫在脸上的什么位置?田宅宫代表什么?
Linux 上的开源视频字幕应用–Live Captions
全球信息:Win10专业版激活方法
【环球播资讯】kafka常用指令
剑指Notion:微软协作平台Loop即将进入公开预览阶段
当前滚动:又来一个“保时捷” 江汽EV3申报:国内首搭载46系列大圆柱电芯
160g超满足:嘉兴特产蛋黄大肉粽2.9元/只大促
环球播报:从“看不起”到“跟不上”:200多名理想汽车车主分享用车体验
热头条丨《街霸6》新解说员宣传片:日本少女冠军人美声甜!
新消息丨国内“投教第一股”九方财富登陆港股,业绩亮眼,市值逼近80亿
面向状态机编程:复杂业务逻辑应对之道
多光源渲染方案 - Many Lights Sampling
世界微动态丨在java中String类为什么要设计成final?Java面试常见问题
报道:LoadRunner——脚本优化(二)
马斯克要自建“乌托邦小镇”:员工全部搬进去 自己当“镇长”
拒绝投影行业亮度虚标!Vidda官宣三色激光全家桶新品
环球最资讯丨新一轮国内油价将于17日迎来调整:有再度搁浅可能
【环球聚看点】彻底解决“刹车争议”!电商平台上线特斯拉脚部专用记录仪:全程摄像
当前播报:简单到复杂:C#拷贝文件的3种方法
环球热门:对LSTM应用于图像的初步理解