前端开发那些事儿

webpack 小知识

2021-04-11  本文已影响0人  婆娘漂亮生活安逸

写在前面的:说实话,平时项目的 webpack 配置几乎我没有参与过。然后觉着还是有必要整理相关的一些题目巩固一下。首先呢,我推荐还是去官网稍微了解一下基础知识。

webpack 与 grunt、gulp 的不同?


三者都是构建工具,但是侧重点不同。

有哪些常见的 loader?他们是解决什么问题的?


有哪些常见的 plugin?他们是解决什么问题的?


loader 和 plugin 的不同?


(1)定义

(2)用法

css-loader 和 style-loader 区别?


file-loader 和 url-loader 区别?


什么是bundle,什么是chunk,什么是module


什么是entry,output?


什么是Tree-shaking?CSS可以Tree-shaking?


Tree-shaking 是指在打包中取出那些引入了但在代码中没有被用到的死代码。webpack中通过 uglifysPlugin 来Tree-shaking JS。CSS需要使用 purify-CSS

webpack 基本功能?


(1)代码转换:TypeScript 编译成 JavaScript、SCSS 编译成 CSS 等等
(2)文件优化:压缩 JavaScript、CSS、HTML 代码,压缩合并图片等
(3)代码分割:提取多个页面的公共代码、提取首屏不需要执行部分的代码让其异步加载
(4)模块合并:在采用模块化的项目有很多模块和文件,需要构建功能把模块分类合并成一个文件
(5)自动刷新:监听本地源代码的变化,自动构建,刷新浏览器
(6)代码校验:在代码被提交到仓库前需要检测代码是否符合规范,以及单元测试是否通过
(7)自动发布:更新完代码后,自动构建出线上发布代码并传输给发布系统。

webpack 构建流程?(介绍一下webpack 的整个生命周期?)


Webpack 的运行流程是一个串行的过程,从启动到结束会依次执行以下流程:

(1)初始化参数:从配置文件和 Shell 语句中读取与合并参数,得出最终的参数;
(2)开始编译:用上一步得到的参数初始化 Compiler 对象,加载所有配置的插件,执行对象的 run 方法开始执行编译;
(3)确定入口:根据配置中的 entry 找出所有的入口文件;
(4)编译模块:从入口文件出发,调用所有配置的 Loader 对模块进行翻译,再找出该模块依赖的模块,再递归本步骤直到所有入口依赖的文件都经过了本步骤的处理;
(5)完成模块编译:在经过第4步使用 Loader 翻译完所有模块后,得到了每个模块被翻译后的最终内容以及它们之间的依赖关系;
(6)输出资源:根据入口和模块之间的依赖关系,组装成一个个包含多个模块的 Chunk,再把每个 Chunk 转换成一个单独的文件加入到输出列表,这步是可以修改输出内容的最后机会;
(7)输出完成:在确定好输出内容后,根据配置确定输出的路径和文件名,把文件内容写入到文件系统。

在以上过程中,Webpack 会在特定的时间点广播出特定的事件,插件在监听到感兴趣的事件后会执行特定的逻辑,并且插件可以调用 Webpack 提供的 API 改变 Webpack 的运行结果。

简单说

(1)初始化:启动构建,读取与合并配置参数,加载 Plugin,实例化 Compiler
(2)编译:从 Entry 出发,针对每个 Module 串行调用对应的 Loader 去翻译文件的内容,再找到该 Module 依赖的 Module,递归地进行编译处理
(3)输出:将编译后的 Module 组合成 Chunk,将 Chunk 转换成文件,输出到文件系统中

如何提高webpack的构建速度?


如何优化打包大小?


了解哪些模块化标准?


(1) CommonJS
(2) AMD

AMD规范则是非同步加载模块,允许指定回调函数。

(3) CMD

CMD规范专门用于浏览器端,模块的加载是异步的,模块使用时才会加载执行。

(4) UMD

规范类似于兼容 CommonJS 和 AMD 的语法糖,是模块定义的跨平台解决方案。

(5) ES6模块

编译时能确定模块的依赖关系,以及输入和输出的变量。

上一篇下一篇

猜你喜欢

热点阅读