webpack5

120 阅读3分钟

image.png

1.处理css

css-loader:将css转成commonjs

style-loader:生成style标签

2.处理less

less-loader:将less转成css

3.处理sass

sasssass-loader:将sass转成css

4.处理stylus

stylus-loader

5.处理图片

file-loader:将资源原封不动地输出。

url-loader:将图片转为base64,资源优化。

webpack5中将这两个loader功能内置到webpack中,只需简单配置。

配置type:"asset"可自动转化成base64

image.png

6.修改输出文件目录

修改js文件位置 image.png

修改静态资源文件输出目录

image.png

7.自动清空上次打包内容

image.png

8.处理字体图标资源

image.png

9.处理其他资源

image.png

10. 处理eslint文件

webpack4中使用loader处理,webpack5中使用plugin。

eslint、 eslint-webpack-plugin :使用 eslint来查找和修复 JavaScript 代码中的问题。

image.png

11、将高级js语法转成低级js

babel-loader @babel/core @babel/preset-env

image.png

image.png

image.png

12.自动生成html引入打包输出资源

html-webpack-plugin: 自动生成html文件

image.png

13. 开启服务器监测代码变化自动打包

webpack-dev-server

image.png

指令:npx webpack serve

注意:开发服务器不会输出资源,在内存中编译打包。

14. 生产模式配置

生产模式需要新建一个配置文件:webpack.prod.js

  • 运行代码是在外部运行的,所以绝对路径都需要回退一级目录
  • 生产模式不需要devServer

image.png

配置运行指令:

image.png

15. 提取css成单独文件

原因:

image.png

使用min-css-extract-plugin, 去除style-loader

image.png

image.png

16. css兼容性处理

postcss-loader postcss postcss-preset-env

image.png

配置兼容ie8以上:

image.png

常用兼容配置:所有浏览器最近两个最新版本,并且覆盖99%的浏览器,并且不是死的版本。 image.png

17. 封装重复loader

image.png

image.png

18. css压缩

html和js在生产环境下会自动压缩,但css不会,需要用插件css-minimizer-webpack-plugin

image.png

19. sourcemap

image.png

配置devtool属性

  • 开发模式:cheap-module-source-map,只关心行不关心列
  • 生产模式:source-map,行列都关注,因为生产模式下会压缩代码成一行,所以需要知道列。

image.png

20.提升构建打包速度 HotModuleReplacement

image.png

css默认会热更新,但js不会,需要手动配置

image.png

实际开发中不会这么配置,一些loader会自动配置好,例如:vue-loader,react-hot-loader

21. 优化loader匹配

oneOf属性

image.png

image.png

22. 打包优化include、exclude

image.png

23. 提升打包速度,缓存babel、eslint

image.png

二次打包时只针对修改过的文件,其他采用缓存的内容,提升打包速度。

image.png

image.png

24. 提升打包速度,多进程打包

image.png 使用thread-loader开启多线程

image.png

image.png

image.png

25. 减少babel打包的文件体积,抽离辅助代码

babel会自动为每个文件都定义一些需要使用的辅助代码,很多辅助代码都重复了,需要将这些辅助代码抽离成独立模块,减小体积。

@babel/plugin-transform-runtime

image.png

image.png

26.压缩图片

image-minimizer-webpack-plugin、imagein

image.png

image.png

image.png

27. 分割代码(提取多次使用的代码,不重复编译)

image.png

多入口: image.png

多入口提取公共模块:

image.png

多入口按需加载:

image.png

单入口按需加载:

image.png image.png

image.png

模块命名:

image.png

image.png

统一命名规范:

image.png

image.png

image.png

28。 preload和prefetch

image.png

@vue/preload-webpack-plugin

preload: image.png

prefetch:比较实用,但兼容性问题比较大

image.png

29. 打包资源缓存 network cache

根据文件内容生成哈希值:

image.png A文件依赖B文件,B文件变化时文件名的哈希值也会变化,导致A文件也发生变化。需要有个runtime文件来做指定依赖变量在哪个文件中找,当B文件变化,A文件没有变化时,A文件不会打包生成新文件。 image.png

30. js兼容性问题corejs

image.png

实现corejs的按需加载:

image.png

31. 项目离线缓存:PWA

image.png

image.png

image.png

生成service-worker文件:

image.png