webpack是一个现代javascript应用程序的静态模块打包器。当webpack处理应用程序时,它会递归地构建一个依赖关系表图,其中包含应用程序需要的每个模块,然后将所有这些模块打包成一个或多个bundle
四个核心概念:
入口(entry),输出(output),loader,插件(plugins)
webpack打包原理:把一切都视为模块,不管是css,js,image还是html都可以相互引用,通过定义entry.js对所有依赖的文件进行追踪,将各个模块通过loader和plugins处理,然后打包在一起
基本功能:
1.代码转换:将typescript编译成javascript,scss编译成css
2.文件优化:压缩javascript,css,html代码,压缩合并图片
3.代码分割:提取多个页面的公共代码,提取首屏不需要执行部分的代码使其异步加载
4.模块合并:在采用模块化的项目有很多模块和文件,需要构建功能把模块分类合并成一个文件
为什么需要webpack
可以使js代码体积更小,加载更快,可以编译高级的语言和语法(ts,es6,scss)
webpack构建流程
1.初始化参数
2.开始编译
3.确定入口
4.编译模块
5.完成模块编译
6.输出资源
7.输出完成
配置单页面和多页面
单页面是webpack的标准模式,直接在entry中指定单页面应用的入口即可,多页面使用webpack的autoWebPlugins来完成
loader的作用
webpack默认只能打包js文件,配置里的module.rules数组配置了一组规则,告诉webpack在遇到哪些文件时使用哪些loader去加载和转换打包成js
常用的loader
css-loader读取合并css文件
style-loader把css内容注入到js中
sass-loader解析saas文件
postcss-loader自动添加浏览器兼容前缀
url-loader将文件转换为base64 URI
vue-loader处理vue文件
plugin的作用
用来扩展webpack功能,通过在构建流程中注入钩子实现
bundle,chunk和module
bundle是由webpack打包出来的文件,chunk是指webpack在进行模块依赖分析的时候,代码分割出来的代码块,module是开发中的单个模块
常见的plugins
HtmlWebpackPlugin自动在打包结束后生成的html文件,并在其中引入bundle.js
CleanWebpackPlugin打包完成后自动删除上次打包的文件
ExtractTextPlugin用于将css,less打包成一个公共的文件
sourceMap
将打包后的文件映射到源代码,用于定位报错位置
webpack多入口文件
entry:{home:resolve(__dirname,"src/home/index.js"),about:resolve(__dirname,"src/about/index.js")}