webpack面试知识点

132 阅读3分钟

webpack面试知识点

webpack流程

1.初始化参数

从配置文件和shell语句中读取和合并参数,得出最终参数

2.开始编译

用上一步得到的参数来初始化complier对象,加载所有配置插件,执行对象的run方法开始执行编译

3.确定入口

根据配置中的entry找出所有的入口文件

4.编译模块

从入口文件出发,调用所有配置的loader来对模块进行翻译,再找出该模块依赖的模块,再递归本步骤,直到所有入口依赖的文件都经过了本步骤的处理。

5.完成编译

在经过了第4步使用loader翻译完所有模块后,得到每个模块被翻译的最终内容以及所有依赖关系

6.输出资源

根据入口和模块之间的依赖关系,组装成一个个包含多个模块的chunk,再把每个chunk转换成文件加入输出列表,这步是可以修改输出内容的最后机会

7.输出完成

在确定好输出内容后,根据配置确定输出路径和文件名,把文件内容写入到文件系统

webpack的核心概念

  • entry:指定webpack开始构建的入口模块,从该模块开始构建并计算出直接或间接依赖的模块或者库。
  • output:告诉webpack如何命名输出的文件以及输出的目录
  • Module:模块,在 Webpack 里一切皆模块,一个模块对应着一个文件。Webpack 会从配置的 Entry 开始递归找出所有依赖的模块。
  • chunk:coding split的产物,我们可以对一些代码打包成一个单独的chunk,比如某些公共模块,去重,更好的利用缓存。或者按需加载某些功能模块,优化加载时间。在webpack3及以前我们都利用CommonsChunkPlugin将一些公共代码分割成一个chunk,实现单独加载。在webpack4 中CommonsChunkPlugin被废弃,使用SplitChunksPlugin
  • loader:模块转换器,用于把模块原内容按照需求转换成新内容。
  • plugin:扩展插件,在 Webpack 构建流程中的特定时机会广播出对应的事件,插件可以监听这些事件的发生,在特定时机做对应的事情。

webpack编译过程有两个核心的概念compliercompliation

  • complier:负责文件的监听和启动,complier对象包含了webpack所有的配置,全局只有一个complier对象
  • compliation:当webpack以开发者模式运行时,每当检测到文件变化,一个新的compliation实例被创建,其中包含了当前的资源模块和编译生成的资源、变化的文件等,compliation对象也提供了事件回调供插件做扩展

webpack的plugins和loaders的实现原理

webpack部分原理 深入浅出webpack

  • loader:它的工作流是将一个文件以字符串(buffer)的形式读入,然后对其进行语法分析和转换,然后交由下一个环节处理,所有载入的模块都会转换成js可以识别的代码,从而完成模块的集成
  • plugin:webpack 在编译代码过程中,会触发一系列 Tapable 钩子事件,插件所做的,就是找到相应的钩子,往上面挂上自己的任务,也就是注册事件,这样,当 webpack 构建的时候,插件注册的事件就会随着钩子的触发而执行了。

Tapable

Tapable 为 webpack 提供了统一的插件接口(钩子)类型定义,它是 webpack 的核心功能库