webpack的小知识

308 阅读2分钟

「这是我参与11月更文挑战的第20天,活动详情查看:2021最后一次更文挑战」。

webpack中的Module是指的什么

模块,webpack支持ESModule、Commonjs、AMD、Assests

1)、ESM:

通过export导出,允许将ESM中内容暴露给其他模块,通过import引入。

import {aaa} from './a.js'

//a.js
export {aaa}

2、CommonJs

通过module.exports,允许将commonjs中的内容暴露给其他模块

引入方式: require(...)

chunk和bundle的区别

1)、chunk是webpack打包过程中的moudles的集合,是打包过程中的概念。

webpack打包是从entry(入口)模块开始,入口模块又会引入其他模块、其他模块又会引入其他模块,webpack通过引用关系去逐个打包模块,这些modules就形成了一个chunk。

2)、dundle是我们最终输出的一个或者多个打包好的文件

3)、大多数情况下,一个chunk会产生一个bundle,但是也有例外。如果index是数组形似,他只会认为一个chunk,如果像key-value的形势,会多增加一个入口。如果加了sourcemap(打包源文件),一个entry,一个chunk会对应两个dundle。 Chunk是过程中的代码块,bundle是打包结果输出的代码块。

Plugin和Loader分别是什么?怎么工作的?

1)、Loader

模块转换器,将非js模块转化为webpack能识别的js模块

本质上,webpack loader将所有类型的文件,转换为引用程序的依赖图可以直接引用的模块

2)、Plugin

扩展插件,webpack运行的各个阶段,都会广播出对应的事件,插件去监听对应的使事件

3)、Compiler

是一个对象,包含了webpack环境的所有配置信息,包含options loader plugins

webpack启动的时候实例化,他是全局唯一的,可以将其理解为webpack的实例

4)、Compliation

包含了当前的模块资源,编译生成资源。

webpack在开发模式下运行的时候,每当检测到一个文件变化,就会创建一个新的Compliation

简单描述一下webpack打包过程

1、初始化参数: shell webpack.config.js

2、开始编译:初始化一个Compiler对象,加载所有的配置,开始执行编译

3、确定入口:根据entry中的配置,找出所有的入口文件

4、编译模块:从入口开始,调用所有的loader,再去递归的找依赖

5、完成模块的编译:得到每个模块翻译后的最终内容以及他们之间的依赖关系

6、输出资源:根据得到的依赖关系,组装成一个个包含多个module的chunk

7、输出完成、根据配置,确定要输出的文件名以及文件路径