这是我参加[第五届青训营]伴学笔记创作活动的第13天
本堂课程重要知识
- 了解前端工程的痛点/前端构建工具的意义
- 了解Vite 概览、业界案例、优势
- 了解Vite 上手实战与架构解析
- 了解Vite 进阶路线
前端工程痛点
- 模块化
- 虽然已有ESM、CommonJS、UMD的模块化规定,但仍然没有统一
- 资源编译
- 浏览器对高级语法的编译赶不上开发者脑洞
- 产物质量
- 代码体积、代码性能、兼容性
- 开发效率
- 热更新
前端构建工具的意义
vite概览
启动时间和更新时间都比rollup和webpack快
传统打包工具的问题
行业两种趋势
- 全球浏览器
对原生ESM的普遍支持(目前占比92%以上)- 两大要素:1.script标签增加type="module"属性2.使用ESM模块导入导出语法
- =>故vite开发了vite dev server,而基于原生ESM的开发服务优势如下
- 无需打包项目源代码
- 天然的按需加载
- 可以利用文件级的浏览器缓存
- 基于原生语言(Go、Rust)编写前端编译工具链兴起,如Go语言编写的Esbuild、Rust编写的SWC
- eg.基于Esbuild的编译性能优化
- eg.基于Esbuild的编译性能优化
vite内置的web构建能力
大大减少了配置文件的代码量,降低开发成本和效率
vite特点:响应迅速和开箱即用
vite实战
1.项目初始化
#提前安装pnpm
npm i -g pnpm
#初始化命令
pnpm create vite
#安装依赖
pnpm install
#启动项目
npm run dev
#打开浏览器访问对应地址
2.使用 Sass/Scss & CSS Modules
样式隔离
3.使用静态资源
除了常见的图片格式,Vite也内置了对于JSON、Worker、WAASM资源的加载支持
可以使用HMR,此处无需额外配置,自动启动,修改代码就可看到样式改变
4.生产环境 Tree Shaking
Tree Shaking也无需额外配置,自动启动
vite整体架构
关键技术
单文件编译
对依赖打包的原因:loader module的内容不可控,且产物格式不规划
最低只能降低ES6
代码压缩
Esbuild作为默认压缩工具,替换传统的Terser、Ualify.is等压缩工具
插件机制
插件机制需求的原因:抽离核心逻辑,易于扩展
- 开发阶段->模拟Rollup插件机制
- 生产环境->直接使用Rollup
插件兼容性具体可查阅vite-rollup-plugins.patak.dev/
插件钩子
vite进阶路线
- 深入双引擎:vite依赖esbuild和rollup两个引擎,所以两者的
官网文档可以深入阅读,先了解基本使用,动手尝试各项常用配置后再学习其插件开发 - 代码分割(拆包)
更好的缓存复用,提升页面加载速度
cn.vitejs.dev/config/buil…
rollupjs.org/configurati…
- JS编译工具(babel)
包括官方站点和插件手册都是可以学习的渠道
- 语法安全降级-以Promise语法为例,IE11没有支持
如何解决
可以通过babel里的preset-env或vite官方降级插件
- 服务器渲染(SSR)
并非所有项目都会涉及,但在C端的项目是比较常见的
参考资料: Vite-SSR文档 Vite官方ssr-demo项目 使用Vite搭建SSR工程
- 深入了解底层标准
如今ESM规范已成为趋势
参考资料:
hacks.mozilla.org/2018/03/es-… antfu.me/posts/publi…
什么是PureESM? - vite社区生态