webpack5
为什么引入webpack
必须了解ES6的模块化语法
模块化必要性
希望一段代码有自己的作用域,没有命名冲突等
模块与脚本的区别
可以按需导入模块数据 ,但是不能按需导入脚本数据
模块语法
export 导出 import导入
1、定义变量同时暴露数据 在声明符前面加上export
// 定义一个变量并暴露
export let name = 'doug';
// 定义一个函数并暴露
export function say(){
console.log('hello ' + name);
}
// 定义一个类并暴露
export class Student {
constructor(name, age){
this.name = name;
this.age = age;
}
}
// 定义一个函数,并不把它暴露出去, 其他模块从外部无法访问这个函数
function privateFunc(){
console.log('我是私有成员,没有被暴露出去,所以别人没有办法访问到我');
}
对应的导入(导入的数据是没有办法直接改变的。但是可以间接的修改这个变量的值. 假如在模块 a 中定义了一个可以修改 name 值的函数, 则可以通过调用这个函数来修改 name 的值了)
import { name, say } from './a.js';
2、一次性导入一个模块暴露出来的所有数据,使用as对导入和导出的数据进行重命名
import * as aObj from './a.js'; // a 模块所有暴露出的数据都挂到了 aObj 上
// 通过 aObj 来访问和调用 a 模块中的变量和方法
console.log(aObj.name);
aObj.say();
// 导出
export {say as speak};
//导入
import { speak } from './a.js'
3、默认暴露
// 导出
// 1. 定义的时候就暴露
export default function(){
console.log('方法1暴露函数为默认值');
}
// 2. 先定义后暴露
let name = 'doug';
export default name;
// 3. 将这个值用 as 命名为 default 暴露
class Student{ // ... }
export {Student as default};
// 导入
// 不用 {} 来包裹 不使用 as 关键字将默认值重命名
import familyName from './a.js';
学习视频
69-原理-raw loader_哔哩哔哩_bilibili
学习笔记
前置知识 | 尚硅谷 Web 前端之 Webpack5 教程 (yk2012.github.io)
青训营笔记
前端由资源构成
webpack本质是一种前端资源编译、打包工具
核心流程
1、入口处理
从entry文件开始,启动编译流程
2、依赖解析
从entry文件开始,根据require或者import等语句找到依赖资源
3、资源解析
根据module配置,调用资源转移器,将png、css等非标准js资源转译为js内容
ps:递归调用2,3,直到所有资源处理完毕
4、资源合并打包
将转移后的资源内容合并打包为可直接在浏览器运行的js文件
使用webpack
基本围绕配置
1、流程类配置
作用于流程中某个or若干个环节,直接影响打包效果的配置项。

2、工具类配置
主流程之外,提供更多工程化能力的配置项。
开始编译打包
npx webpack
HMR
Tree-Shaking
理解Loader
为了处理非标准JS资源,设计出资源翻译模块——Loader:用于将资源翻译为标准js
链式调用
其它特性:
链式执行
支持异步执行
分normal、pitch两种模式
理解插件
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 邹阳 の 博客!










