笔记来源:拉勾教育 大前端高薪训练营源码采用
TypeScript
重写为了提升代码的可维护性,源码都使用
TypeScript
编写,大型项目项目的开发都推荐使用类型化的语言。使用
Monorepo
管理项目结构使用一个项目管理多个包,把不同的功能放到不同的
package
中进行管理,这样每个功能模块都划分的比较明确,模块之间的依赖关系也很明确,并且每个模块都能单独发布、测试及使用。-
packages
目录结构
文章图片
compiler-core
:和平台无关的编译器compiler-dom
:浏览器平台下的编译器,依赖于compiler-core
compiler-sfc
:单文件组件编译器,依赖于compiler-core
和compiler-dom
compiler-ssr
:服务端渲染的编译器,依赖于compiler-dom
reactivity
:数据响应式系统,可以独立使用runtime-core
:和平台无关的运行时runtime-dom
:针对浏览器的运行时,处理原生 DOM API 和 事件等runtime-test
:为测试所编写的轻量级运行时,由于它渲染出来的 DOM 树其实是一个 js 对象,所以 这个运行时可以运行在所有的 js 环境里,可以用它来测试渲染是否正确,还可以用于序列化 DOM,触发 DOM 事件,以及记录更新中的某次 DOM 操作server-renderer
:用于服务端渲染shared
:vue 内部使用的公共 apisize-check
:私有的包,不会发布到 npm,作用是在 tree-sharking 后检查包的大小template-explorer
:浏览器里运行的实时编译组件,它会输出 render 函数vue
用来构建完整版的 vue,依赖于compiler
和runtime
【VueJs|【Vue 3.0 新特性(一)】源码的组织方式】不再构建 umd 模块化方式,umd 模块化方式会让代码有更多的冗余,要支持多种模块化的方式,把 cjs、esm、(IIF)自执行分别打包到了不同的文件中。
packages/vue
,包含了所有的构建版本
文章图片
cjs
(CommonJs – 完整版的vue,包含编译器和运行时)
vue.cjs.js
:开发版,未被压缩的代码vue.cjs.prod.js
:生产版,压缩的代码
global
(全局,可以直接通过 script 标签来导入,导入 js 后会增加一个全局的 vue 对象)
vue.global.js
:完整版的vue,包含编译器和运行时vue.global.prod.js
vue.runtime.global.js
:只包含运行时的构建版本vue.runtime.global.prod.js
browser
(浏览器的原生模块化的方式,在浏览器中可以直接使用type="module"
的方式直接导入这些模块。)
vue.esm-browser.js
:完整版的 Vue,包括运行时和编译器vue.esm-browser.prod.js
vue.runtime.esm-browser.js
:只包含运行时的构建版本- ``vue.runtime.esm-browser.prod.js`
bundler
(没有打包所有代码,配合打包工具来使用,都是用ESModule
模块化方式,内部通过import
导入了runtime-core
,构建体积最小)
vue.esm-bundler.js
:完整版的Vue,内部导入了runtime-compiler
vue.esm-bundler.js
:完整版的Vue,内部导入了runtime-compiler
vue.runtime.esm-bundler.js
:使用脚手架创建的项目默认导入的是vue.runtime.esm-bundler
,只导入了运行时,是vue的最小版本,在项目开发完毕后只会打包使用到的代码,可以让 vue 的体积更小。
推荐阅读
- Vue|Vue整合JWT实现用户登录----权限校验
- springboot|基于SpringBoot的汽车租赁管理系统
- Vue|Vue源码 深入响应式原理(一) 响应式对象
- 前端|Vue 前后端交互 (axios async/await )
- vue|超级详细的Vue-cli3使用教程
- vue中mixin混入和vuex状态管理相比较
- 软件研发|web移动端基础事件总结与应用
- Vue|Vue第五天学习总结——Vue全家桶之前端工程化(模块化相关规范、webpack、Vue单文件组件、Vue脚手架、组件库——Element-UI 的基本使用)
- vue|vue-cli项目的webpack打包优化