这是我参与「第四届青训营 」笔记创作活动的的第16天
前端的痛点
- 模块化(多种模块化规范,不统一)
- 资源编译(新语法->旧)
- 产物质量(压缩等)
- 开发效率(热更新HRM)
- ...
构建工具就是来解决上述问题的
- 兼容不同的模块化方案
- 语法资源转换(sass/less->css,ts->js)(图片,字体)
- 压缩代码,treeshaking
- 热更新
为什么是vite
1.快 2.易
ESM的开发优势
- 无需打包源代码(wepack就是因为一个慢)
- 天然的按需加载
- 文件级浏览器缓存
Esbuild
内置web构建能力
yarn create vite
- 全局安装create-vite(vite 脚手架)
- 直接运行create-vite bin 目录下的一个执行配置
- create-vite包含了vite
- 相当于vue-cil 和 webpack
yarn add vite -D
"scripts":{
"dev":"vite"
}
yarn dev
- 依赖预构建
- 可以使用import xx from 'xx'自动在node_modules找
- 依赖预构建,对其他的规范转成esmodule
- 对路径的处理
- 网路多包(原生esmodule不敢支持node_module的原因)
vite.config.js
export defalt{
optimizeDeps:{
excludeL['lodash-es']
}
}
- vite配置文件
- import {defineConfig} from 'vite'
pnpm
1.pnpm create vite
2.pnmp i
3.pnpm run dev
NPM依赖解析和预构建 直接在浏览及会报错import xx from xx 完成coomonjs和esmodule的兼容 cacheDir:'./.cache' 内置HMR
Tree Shakiing优化原理
- 基于ESM的import/export语句的依赖关系,与运行时状态无关(ESM是静态的,COMMONJS是动态的)详见
- 在构建阶段将没有用到的代码删除
为什么要预打包
- 避免node_modules的过多的文件请求
- CommonJS->ESM
- 原理
- pnpm run dev 前扫描依赖
- ESbuild 对依赖代码预打包
- 改写import语句,指定路径为预构建产物路径