Webpack简述
webpack
是模块化打包工具。
webpack
是基于入口的。webpack
会自动地递归解析入口所需要加载的所有资源文件,然后用不同的Loader
来处理不同的文件,用 Plugin
来扩展 webpack
功能。
核心
entry:入口。需要多个入口文件的时候,写成一个对象
output:出口。即使入口文件有多个,也只有一个输出配置
loader:加载器。在 module.rules
中配置,加载和解析非 JavaScript
文件,比如图片、字体图标、CSS文件等
plugin:插件。扩展 webpack
的功能,让 webpack
具有更多的灵活性。在 plugins
中单独配置。 类型为数组,每一项是一个 plugin
的实例,参数都通过构造函数传入。
devtool
用作调试
source-map
:映射代码错误,在源代码中提示错误,会生成.map映射文件inline
:不会生成.map文件,但会将内容放在打包目标文件下cheap
:代码错误提示仅限行,有利于提高打包速度module
:提示node_nodules
的代码错误eval
:通过eval
方式,不会生成.map
文件,打包速度最快,但提示不全cheap-module-eval-source-map
-development
模式下推荐
cheap-module-source-map
-production
模式下推荐
bundle、chunk、module
- bundle:
webpack
打包出来的文件 - chunk:
webpack
在进行模块的依赖分析的时候,代码分割出来的代码块。 - module:是开发中的单个模块
常见 loader
file-loader
: 打包图片,字体图标等资源文件url-loder
: 和file-loader
类似,可以把图片转换成base64
style-loader
:把CSS
插入到DOM
中css-loader
:对@import
和url()
进行处理babel-loader
:ES6
转ES5
sass-loader
: 处理Sass/SCSS
文件postcss-loader
常见 plugin
html-webpack-plugin
:创建HTML
文件,并把对应的js
文件引入clean-webpack-plugin
:自动清除上次打包生成的文件夹copy-webpack-plugin
:将文件或文件夹拷贝到打包目录mini-css-extract-plugin
:将CSS
提取到单独的文件中optimize-css-assets-webpack-plugin
:压缩CSS
文件uglifyjs-webpack-plugin
: 压缩JS
文件
webpack 优化前端性能
- 压缩代码。压缩
JS
文件。压缩css
文件 - 利用CDN加速。将引用的静态资源路径修改为
CDN
上对应的路径。利用output
参数和各loader
的publicPath
参数来修改资源路径 - 去掉不必要的插件
- 按需引入组件库
- vue-router 路由懒加载
Tree-shaking
只打包引入的模块,去除未使用的模块,可以帮助优化包体积,提高打包速度
开启 optimization.usedExports
即可。usedExports
可以标记模块导出的成员是否被外部使用
代码分割
将代码拆分,输出多个js文件,提高性能。
1、同步代码:一般情况下在 optimization.splitChunks
中配置就可以了
2、异步代码:无需做任何配置,会自动进行分割
提高webpack的构建速度
- 根上
webpack
版本的迭代 - 使用
Tree-shaking
extensions
、alias
配置合理,不宜过多plugin
尽可能精简并确保可靠- 在尽可能少的模块上应用
loader
:合理使用include
和exclude
约定文件夹
Webpack 的热更新(HMR)
webpack
的热更新依赖于 HotModuleReplacementPlugin
插件
热加载原理:编辑器文件更改保存后,webpack
重新构建模块后将旧模块替换为新模块