Webpack打包

一、项目配置

1. 配置

2. rem适配

${\textcolor{red}{核心原理:}}$ 1 rem = 根节点(html)字体大小,在不同的屏幕小通过修改根节点字体大小来实现适配。

${\textcolor{red}{项目中:}}$ 配置 flexible 动态修改 html 的字体大小,开发环境使用 px,上线使用 rem,可以使用postcss-px-to-rem 进行转化。

二、打包优化

1. 移除 console

2. sourcemap

3. splitChunks

将公共代码进行提取,(打包分包)

4. prefetch

5. 打包成 gZip

6. runtimeChunk

8. image-webpack-loader

9. 路由懒加载

11. 引入CDN资源

CDN引入

  1. *<% htmlWebpackPlugin %> *在插件的文档中可以查询到htmlWebpackPlugin
  2. 在vue.config.js中给htmlWebpackPlugin 传递参数vue cli

12. tree-shaking

  1. 处理掉未引用的代码。(进行按需引入,把多余的忽略)

三、首屏优化

四、打包部署

1.

2.

3. webpack打包

  1. 执行package.json 中的打包命令
  2. webpack.config.js
  3. 读取配置文件,根据配置文件读取配置参数(入口出口等)。
  4. 找到入口文件(main.js)根据import对文件依赖进行查找。
  5. 当遇到 css、less、sass,vue等会调用loader编译成标准的JS代码,遇到高级JS通过babel转化为低级js,使用HtmlWebpackPlugin进行html的生成,然后对JS代码进行依赖分析,生成一颗关系树。
  6. 文件输出,通过对应css插件对css进行单独打包,通过output实现多出口打包。

五 、工程化思想

六、webpack 和 vite 的区别

  1. webpack会==先打包,然后启动开发服务器==,请求服务器时直接给予打包结果。而vite是直接启动开发服务器,请求哪个模块再==对该模块进行实时编译==。
  2. 由于现代浏览器本身就支持ES Module,会==自动向依赖的Module发出请求==。vite充分利用这一点,将开发环境下的模块文件,就作为浏览器要执行的文件,而不是像webpack那样进行打包合并。由于vite在==启动的时候不需要打包==,也就意味着不需要分析模块的依赖、不需要编译,因此启动速度非常快。当浏览器请求某个模块时,再根据需要对模块内容进行编译。这种==按需动态编译的方式==,极大的缩减了编译时间,项目越复杂、模块越多,vite的优势越明显。
  3. 在HMR(热更新)方面,当改动了一个模块后,仅需让浏览器==重新请求该模块==即可,不像webpack那样需要把该模块的相关依赖模块全部编译一次,效率更高。当需要打包到生产环境时,vite使用传统的rollup进行打包,因此,vite的主要优势在开发阶段。另外,由于vite利用的是ES Module,因此在代码中不可以使用CommonJS