- 浏览器厂商前缀
1 | "browserslist": [ |
- src 源代码 里面的代码 不能够直接在浏览器上运行的
- css 模块化
1 | { |
html-webpack-plugin
- 自动生成html文件
clean-webpack-plugin
- 每次清除已打包文件
- HMR 热更新
- 页面重新加载导致状态丢失
- JS 热更新
1 | module.hot.accept('./sth-Js', () => { |
- Babel处理ES6代码
@babel-loader
、@babel/preset-env
、@babel/core
import '@babel/polyfill'
- 打个补丁
- 但会污染全局环境
core-js
- 具有所有的es5 polyfill(除了function*)
- regengeator + core-js = 所有es6特性被低版本浏览器支持 = @babel/polyfill
- .babelrc
1 | { |
-
vue-loader
|vue-template-complier
-
webpack-dev-server
- 看不到打包文件,会将打包文件放到内存当中
-
Tree Shaking
- 只支持
ES Module
| 静态引入,编译时引入 - 不支持
CommonJS
| 动态引入,执行时引入 - optimization
- production 模式下自动开启
- 只支持
-
package.json
- sideEffects [‘@bundle’] 取消 Tree Shaking 的影响
-
不同的打包模式
- webpack-merge
- webpack.pro.js
- webpack.dev.js
- webpack.test.js
-
代码分割
- Code Splitting
- splitChunks默认异步代码分割
- import(/* webpackChunkName: “lodash”*/‘lodash’)
- webpackChunkName 自定义打包名
-
懒加载
- 异步引入
-
CSS 代码分割
mini-css-extract-plugin@1.3.9
- “sideEffects”: [“*.css”]
- production mode 自动tree-shaking 未使用文件
css-minimizer-webpack-plugin@1.2.0
- CSS 代码压缩
-
自动加载模块,不必在任何地方都import或require个模块
- webpack.ProvidePlugin({key,value})
-
生产 开发 模式公用
- babel-loader
- noParse
- IgnorePlugin
- ParallelUglifyPlugin
-
开发模式
- 自动刷新、热更新 Webpack.HotModuleReplacementPlugin
- DllReferencePlugin React Vue 预先打包一次
-
减小产出代码体积
-
代码体积小,加载速度更快
-
合理分包,不重复加载
-
程序运行速度更快,内存占用更小
-
图片比较小的时候可以采用base64编码 url-loader
-
cdn 引入 加速
-
scope hoisting 作用域提升 webpack@4.41.2 默认配置
-
1 | plugins:[ |
- webpack.base.js
1 | const path = require('path'); |
- webpack.dev.js
1 | const path = require('path'); |
- webpack.dll.js
1 | const path = require('path') |
- webpack.pro.js
1 | const path = require('path'); |
- package.json
1 | { |
- .babelrc
1 | { |