Babel:JS编译器(es6->es5,jsx->js)
loader:编译->js
less-loader:less->css
css–loader:css->js
style-loader:
创建style标签,将js中的样式资源插入标签内,并将标签添加到head中生效
ts–loader:
打包编译Typescript文件
执行顺序:出栈(从后往前)
plugin:发布订阅、广播、监听
优、删、简:压缩代码和图片
对AST抽象语法树进行优化
Tree Shaking:未使用的代码移除
压缩算法:简化表达式,字符串压缩
分类
html–webpack-plugin :
处理html资源,默认会创建一个空的HTML,自动引入打包输出的所有资源(js/css)
mini-css-extract-plugin:
打包过后的css在js文件里,该插件可以把css单独抽出来
clean-webpack-plugin :
每次打包时候,CleanWebpackPlugin 插件就会自动把上一次打的包删除
loader和plugin的区别:loader运行在编译阶段,plugins 在整个周期都起作用
热更新加载原理
代码变动->重新编译->局部更新->无需刷新页面
websocket
:本地、浏览器的双向通信、hash编译标识、生成时间判断变化
websocket
与vite区别:webpack更新整个module、vite更新单个文件
懒加载
代码分割:拆分成块,需要时候再加载
commonJS:import动态导入
减小初始加载时间: 只加载必需的代码块
并行加载: 浏览器支持并行加载多个资源
缓存优化: 只有发生更改的代码块需要重新下载
原理/手写
Loader
Node 模块导出函数(source源码){return 处理后的source}
同步:return/this.callback
异步:promise+
Node.js 7.6.0+
配置
链式调用:上一个loader返回作为下一个loader参数
Plugin:带有apply方法的class
Tapable:订阅发布
compiler:编译过程
配置:webpack.config.js
里 require
并实例化
webpack
未涉及 loader 和 plugin
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。