# webpack
静态模块打包器,可以用它管理项目中的模块依赖,并编译出模块所需的静态文件。处理应用程序时,递归构建一个依赖关系图,依赖图对应映射到项目所需的每个模块,并生成一个或多个bundle。
# 常用配置
# entry
打包入口
# output
打包出口
# devtool
配置source-map相关
# module
主要用来配置loader相关。
loader是一个转换器,将A文件进行编译成B文件。
# 常见loader
样式:style-loader、css-loader、less-loader、postcss-loader(样式自动补全)
文件:raw-loader、file-loader、url-loader
raw-loader 将文件以字符串形式返回
file-loader 将文件复制到指定目录,并生成文件资源的URL
url-loader 类似于file-loader,可以将小于配置limit大小的文件转换成Data Url的方式,减少请求编译:babel-loader、ts-loader、vue-loader
将其他语言装换成js语言或编译下一代语言。校验:mocha-loader、eslint-loader
# resolve
设置模块如何解析。
- alias 配置别名
- extensions 按顺序解析文件后缀名
# plugins
通过钩子函数参与到整个构建周期,构建过程中执行某些特定的任务,改变输出结果。
# 常见plugins
- html-webpack-plugin 根据模板生成HTML文件,并自动应用CSS和JS静态文件。
- mini-css-extract-plugin 抽离js文件中引用的CSS文件。
- DefinePlugin 编译时配置全局变量
- HotModuleReplacementPlugin 热更新
- webpack-bundle-analyzer bundle文件分析工具
- happypack 通过多进程模型,加速代码构建
- clean-webpack-plugin 目录清理
# externals
防止将某些import的包打包到bundle中,而是在运行时从外部获取。
常见的是使用CDN。
# proxyTable 原理
浏览器是禁止跨域的,服务端并不禁止跨域,所以浏览器可以发给自己的服务端,然后自己的服务端再转发给要跨域的服务端,做一层代理。
使用http-proxy-middleware中间件可以实现,http-proxy-middleware内部用的http-proxy。
# 优化打包速度
# 高版本的Webpack
# 多进程/多实例打包
- happypack
- thread-loader
# 压缩代码
- webpack-paralle-uglify-plugin
- terser-webpack-plugin
# 图片压缩
- image-webpack-loader
# 公共资源
splitchunks
# 缓存
cache-loader或hard-source-webpack-loader
# tree-shaking
依赖于es6语法。检测到未使用文件中未使用的部分,打包时进行删除。
# scope-hoisting
# 参考
← NGINX loader 和 plugin →