1、webpack
webpack打包工具(重点在于配置和使用,原理并不高优。只在开发环境应用,不在线上环境运行),压缩整合代码,让网页加载更快。
前端代码为什么要进行构建和打包?
体积更好(Tree-shaking、压缩、合并),加载更快
编译高级语法(scss、TS、ES6+、模块化)
兼容性和错误检查(Ployfill、postcss、eslint)
统一高效的开发环境,统一的构建流程和产出标准,集成公司构建规范(提测、上线)
基本配置、高级配置
1)基本配置
拆分配置和merge:common dev prod配置
启动本地服务 webpack-dev-server
处理ES6 babel-loader
处理样式 style-loader css-loader less-loader postcss-loader(loader执行顺序从后往前)
处理图片 file-loader url-loader
2)高级配置
多入口
抽离css
抽离公共代码
异步加载js(懒加载)
处理JSX babel-loader
处理Vue vue-loader
module chunk bundle分别是什么意思?区别?
module 各种源码文件,webpack中一切皆模块,被引入的都可以看作模块,js、css、img
chunk 多模块合成的(类似在内存中还没产出的代码块),entry splitChunk import()生成chunk
bundle 最终的输出文件
webpack性能优化
1)优化打包构建速度
(生产环境)
优化babel-loader:加cacheDirectory、加include或exclude
IgnorePlugin
noParse 引入的时候避免打包的东西
happyPack 多进程打包
ParallelUglifyPlugin 多进程压缩JS
(不能用于生产环境)
自动刷新 整个网页全部刷新,速度比较慢;整个网页全部刷新,状态全丢失
热更新 新代码生效,网页不刷新,状态不丢失
DllPlugin动态链接库插件,前端框架vue React,体积大构建慢。较稳定,不常升级版本。同一个版本只构建一次即可,不用每次都重新构建。
2)优化产出代码执行效率
小图片base64编码
bundle+hash
懒加载
提取公共代码
使用CDN加速 img、css、js推到CDN上
使用production 自动开启代码压缩;Vue和React等会自动删掉调试代码;启动Tree-Shaking
使用Scope Hosting 多个函数合并成一个函数。代码体积更小,创建函数作用域更少,代码可读性更好
构建流程概述(打包流程)
参考:webpack构建流程
loader和plugin区别?
loader模块转换器
plugin扩展插件
常见loader和plugin?
参考:loader和plugin
tree Shaking,什么时候失效
2、vite
极快的开发服务器启动(基于原生ESM的按需编译)
闪电般的HMR
开箱即用的现代化前端支持(ts、css)
生产构建使用rollup
预加载
为什么本地启动快
3、babel
babel从ES高级语法向低级语法转变