模块化开发与规范化标准

194 阅读2分钟

简答题

一、Webpack 的构建流程主要有哪些环节?如果可以请尽可能详尽的描述 Webpack 打包的整个过程?

Webpack的构建流程可以分为以下三个阶段:

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

webpack的打包过程是一个串行的过程,从启动到结束会依次执行以下流程

  • 1、初始化参数:从配置文件和Shell语句中读取与合并参数,得出最终的参数
  • 2、开始编译:用上一步得到的参数初始化Compailer对象, 加载所有的配置对象,执行对象的run方法开始执行编译
  • 3、确定入口:根据配置文件entry找到所有的入口文件
  • 4、编译模板:从入口文件出发,调用配置的所有Loader对模版进行编译, 在找出该模块依赖的模块,在递归本步骤直到入口文件所依赖的模块都经过本步骤的处理
  • 5、完成模板编译:经过Loader处理过的所有模块,得到每一个模板经过Loader转换之后的内容,及其模块之间的依赖关系
  • 6、输入资源:根据入口文件与模块之间的依赖关系,组成一个个包含多个模块的chunk,在把一个个chunk转换成单独的文件加入到输出列表,这一步是修改输出内容的最后机会
  • 7、输出完成:在确定好输出内容后, 根据配置确认输出目录和文件名,把文件写入到文件系统

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

二、Loader 和 Plugin 有哪些不同?请描述一下开发 Loader 和 Plugin 的思路?

loader: 扩展了webpack, 但是只是专注于(transform)转换文件这个领域, 完成压缩、打包,语言翻译。仅仅只是为了转换文件 plugin:直接作用于webpack上。而且plugin不仅只局限在打包,资源的加载上,它的功能要更加丰富。从打包优化和压缩,到重新定义环境变量,功能强大到可以用来处理各种各样的任务。plugin可以携带参数。插件是一个具有 apply 属性的 JavaScript 对象。apply 属性会被 webpack compiler 调用,并且 compiler 对象可在整个编译生命周期访问.