💥此MD/PDF/HTML文档由 @竹梦者也 编辑制作,不可贩卖❌。仅供学习交流使用,下载后切勿随意传播。转载麻烦加上出处~

📌欢迎在留言区提供修改建议~

💌本文内容和代码来自于tianyu老师的webpack教程

✨本笔记所有相关配置已兼容webpack-5.38.1版本,请根据你的版本webpack -v正确食用。

 

✅2021.7.13 @竹梦者也(https://www.zjgsuzjx.top)

 

 

一、webpack4.0

一、基本概念

1. 铺垫

grunt->gulp->webpack主流

源代码:程序员写的没有经过任何的加工的代码 源代码最好经过层层的加工处理

src----源代码---程序员写的没有经过任何的加工的代码--------生的鸡蛋、生的大米。

dist/build/built----加工之后的代码---经过层层的加工处理的代码----------蛋炒饭

构建:将程序写的源代码,经过编译、压缩、语法检查、兼容性处理、生成浏览器可以高效、稳定运行的代码

2. 含义

3. 核心概念

4. 理解Loader

5. 理解Plugins

二、简单使用过程

1. 安装

2. 项目初始化

生成package.json文件

如:

3. 原生打包JS和JSON

举例

创建js文件

创建json文件

创建主页面:

运行指令

注意:我是webpack5.38.1, 与4的区别是必须要求目录前面加上 ./,且默认文件名为main.js

c4a064265825adaa315a6e39c70575d4.jpg

结论

缺点

改善

使用webpack配置文件解决,自定义功能

三、使用webpack配置文件

官方中文文档:https://webpack.docschina.org/concepts/

目的:在项目根目录定义配置文件,通过自定义配置文件,还原以上功能

文件名称webpack.config.js

文件内容

运行指令webpack

四、使用工具

1. 打包less资源

概述:less文件webpack不能解析,需要借助loader编译解析

创建less文件

在index.js文件引入

安装loader

npm install css-loader style-loader less-loader less -D

配置loader

注意:上端代码加在module.exports里。

运行指令webpack

2. JS语法检查

概述:对js基本语法错误/隐患,进行提前检查

安装loadernpm install eslint-loader eslint -D

注意:现在已经被弃用了

在:eslint.org网站 -> userGuide -> Configuring ESLint 查看如何配置

在:eslint.org网站 -> userGuide -> Rules 查看所有规则

官方中文文档:https://cn.eslint.org/

配置loader

需要加在modulerules里。

修改package.json

注意:JSON不能有注释!记得删掉

运行指令webpack

3. JS语法转换

概述:将浏览器不能识别的新语法转换成原来识别的旧语法,做浏览器兼容性处理

安装loadernpm install babel-loader @babel/core @babel/preset-env --save-dev

配置loader

要加在modulerules里。

运行指令:webpack

缺点:不能转换高级语法比如Promise,也不能兼容IE旧版本浏览器。

4. JS兼容性处理

# 第一种方法

使用经典的polyfill

安装npm install @babel/polyfill

使用

index.js(入口JS文件)加入下面代码,最好放在最上面

优点:解决babel只能转换部分低级语法的问题(如:let/const/解构赋值...),引入polyfill可以转换高级语法(如:Promise)

缺点:将所有高级语法都进行了转换,但实际上可能只使用一部分。所以导致文件变得很大很大

解决:需要按需加载(使用了什么高级语法,就转换什么,而其他的不转换)

# 第二种方法

借助按需引入core-js按需引入。

安装npm install core-js

配置loader

要加在modulerules里。

补充:将浏览器兼容性版本调高可以减小压缩后的文件大小。

5. 打包样式文件中的图片资源

概述:图片文件webpack不能解析,需要借助loader编译解析

添加2张图片:

Base64编码适合于8kb以下图片。

引入图片:在less或css文件中通过背景图的方式引入图片

安装loader

npm install file-loader url-loader -D

补充:url-loader是对象file-loader的上层封装,使用时需配合file-loader使用。

配置loader

运行指令webpack

6. 打包html文件

概述html文件webpack不能解析,需要借助插件编译解析

添加html文件src/index.html

注意不要在html中引入任何css和js文件

安装插件

npm install html-webpack-plugin -D

配置Plugins

webpack.config.js中引入插件(插件都需要手动引入,而loader会自动加载)

以下代码与module平行关系:

运行指令webpack

7. 打包html中图片资源

概述html中的图片url-loader没法处理,它只能处理js中引入的图片 / 样式中图片,不能处理htmlimg标签,需要引入其他html-loader处理。

添加图片:在src/index.html添加两个img标签

安装loader

npm install html-loader -D

配置loader

8. 打包媒体资源

概述:其他资源webpack不能解析,需要借助loader编译解析

添加字体文件(举例)src/media/iconfont.ttf(以阿里图标为例)

修改样式

在index.js引入

html里添加字体

配置loader

运行指令webpack

9. 自动编译打包运行

概念:能够将所有打包后的文件放在内存里,并且自动配置并打开了一个服务器,能够实现实时刷新页面。不会在本地输出文件。

详细配置见官网:指南 -> 开发环境 -> 使用webpack-dev-server

自动刷新:live-reload 是webpack-dev-server 自带的

安装loader

npm install webpack-dev-server -D

配置对象

注意这段代码和module是平行关系。

修改url-loader部分配置

修改package.json

运行指令npm start

注意:webpack-dev-server指令才能启动devServer配置,然后配置到package.json中才行

10. 热模替换功能

概述:热模块替换(HMR)是webpack提供的最有用的功能之一。它允许在运行时更新所有类型的模块,而无需完全刷新(只更新变化的模块,不变的模块不更新)。

详细配置见官网:指南 -> 模块热替换

修改devServer配置

问题html文件无法自动更新了,需要增加一个入口

11. devtool

概述: 一种将压缩/编译文件中的代码映射回源文件中的原始位置的技术,让我们调试代码不在困难

简单来讲就是出现错误时将定位到源代码的行号,而不是打包后的行号。

详细配置见官网:配置 -> devtool

介绍

推荐使用

12. 准备生产环境

概念:之前都是基于开发环境下的调试。在项目上线后就是生产环境了,所以会有较大的区别,需要单独为生产环境配置。

第一步

创建文件夹config,将webpack.config.js复制两份。

之后可以删除根目录下webpack.config.js

第二步

修改webpack.prod.js配置,删除webpack-dev-server配置。

修改output

修改mode

修改module中的url-loader

修改devtool

第三步

修改package.json的脚本指令。

备注:startdev的功能是一样的,部分企业会用后者。

第四步

根据不同环境执行不同的指令。

npm startnpm run dev

npm run build

第五步

注意: 生产环境代码需要部署到服务器上才能运行 (serve这个库能帮助我们快速搭建一个静态资源服务器)

安装:npm i serve -g

执行:serve -s build -p 5000

13. 清除打包文件目录

概述:每次打包生成了文件,都需要手动删除,引入插件帮助我们自动删除上一次的文件

安装插件

npm install clean-webpack-plugin -D

引入插件

上面代码放在webpack.prod.js最上方的引入部分

配置插件

运行指令npm run build

14. 提取css成单独文件

安装插件

npm install mini-css-extract-plugin -D

引入插件

上面代码放在webpack.prod.js最上方的引入部分

配置loader

配置插件

运行指令

npm run build

注意:记住直接打开build里的index.html会报错,因为路径问题。所以要利用serve -s build -p 5000来打开

15. 添加css兼容

不兼容5.0+,暂时找不到解决方法。

16. 压缩css

安装插件

npm install optimize-css-assets-webpack-plugin -D

引入插件

配置插件

运行指令npm run build

17. 压缩html

修改插件配置

运行指令npm run build

五、总结

开发使用start,产品上线测试使用buildserve

二、webpack5.0新特性

后续会更新