牛客前端刷题(九)—— 打包篇
创始人
2024-01-15 20:32:48
0

还在担心面试不通过吗?给大家推荐一个超级好用的刷面试题神器:牛客网,里面涵盖了各个领域的面试题库,还有大厂真题哦!

赶快悄悄的努力起来吧,不苒在这里衷心祝愿各位大佬都能顺利通过面试。
面试专栏分享,感觉有用的小伙伴可以点个订阅,不定时更新相关面试题:面试专栏 。
在这里插入图片描述

文章目录

  • 🍉正文
    • 打包
      • 1 打包,webpack和gulp的区别
      • 2 webpack的打包流程
      • 3 webpack 有哪些阶段
  • 🎃专栏分享:

🍉正文

本文内容来源出自 《牛客网》

打包

1 打包,webpack和gulp的区别

参考答案

Gulp:

Gulp是一个自动化构建工具,强调的是前端开发的流程,通过配置一系列的task,定义task处理的事物,然后定义执行顺序,来让Gulp执行task,从而构建前端项目的流程,说白了就是用来打包项目。

不管做什么功能,都有一个统一的接口进行管理,必须去注册一个任务,然后去执行,这也是它的特点之一,即“任务化”。

WebPack:

WebPack是一个前端模块化方案,侧重模块打包,把开发中的所有资源(图片、js文件、css文件等)都看成模块,通过loader(加载器)和plugins(插件)对资源进行处理,打包成符合生产环境部署的前端资源,Gulp也可以配置seajs、requirejs甚至webpack的插件。

它会分析你的项目结构,找到JS模块以及那些浏览器不能够直接运行的扩展语言(如:TypeScript等),然后将其转换和打包为合适的格式供浏览器使用。它最大的优点就是“模块化”(万物皆模块)。
相同点:

  • 都可以对文件进行合并与压缩(JS、CSS)。

不同点:

  • Gulp是构建工具,可以配合各种插件做css.压缩等,解放了双手,实现了自动化。
  • Gulp严格上讲,它旨在规范前端开发流程,不包括模块化功能。
  • WebPack是文件打包工具,可把各个项目的css.压缩文件等打包合并成一个或多个文件,主要就是应用于模块化操作。
  • WebPack更是明显强调模块化开发,而那些文件压缩合并、预处理等功能,只是他附带的功能。
  • WebPack整合了Gulp的优点,当我们想要一步一步来配置自己的环境时,那么gulp就可以满足我们的需要,但是如果我们想一下就配备大部分我们所需要的环境,那么此时可以选用WebPack,前提是写好package.json。
  • gulp与webpack上是互补的,还是可替换的,取决于你项目的需求,它们可不存在冲突的关系哈。
  • Gulp与WebPack可以组合起来使用,以便快速编译(依靠Gulp丰富的组件可以让JS与HTML实现联动,从而控制WebPack应用程序,达到高自动化)

2 webpack的打包流程

参考答案

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

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

如果只执行一次构建,以上阶段将会按照顺序各执行一次。但在开启监听模式下,流程将变为如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JxA7tSp1-1666530254287)(https://uploadfiles.nowcoder.com/images/20220301/4107856_1646129282955/9B823AC99AF889118D34D0CB72E7A28E)]

下面具体介绍一下webpack的三个大阶段具体的小步。

初始化阶段

初始化阶段大致分为:

  • 合并shell和配置文件文件的参数并且实例化Complier对象
  • 加载插件
  • 处理入口
事件名解释
初始化参数从配置文件和 Shell 语句中读取与合并参数,得出最终的参数。 这个过程中还会执行配置文件中的插件实例化语句 new Plugin()。
实例化 Compiler用上一步得到的参数初始化Compiler实例,Compiler负责文件监听和启动编译。Compiler实例中包含了完整的Webpack配置,全局只有一个Compiler实例。
加载插件依次调用插件的apply方法,让插件可以监听后续的所有事件节点。同时给插件传入compiler实例的引用,以方便插件通过compiler调用Webpack提供的API。
environment开始应用Node.js风格的文件系统到compiler对象,以方便后续的文件寻找和读取。
entry-option读取配置的Entrys,为每个Entry实例化一个对应的EntryPlugin,为后面该Entry的递归解析工作做准备。
after-plugins调用完所有内置的和配置的插件的apply方法。
after-resolvers根据配置初始化完resolver,resolver负责在文件系统中寻找指定路径的文件。

编译阶段

事件名解释
before-run清除缓存
run启动一次新的编译。
watch-run和run类似,区别在于它是在监听模式下启动的编译,在这个事件中可以获取到是哪些文件发生了变化导致重新启动一次新的编译。
compile该事件是为了告诉插件一次新的编译将要启动,同时会给插件带上compiler对象。
compilation当Webpack以开发模式运行时,每当检测到文件变化,一次新的Compilation将被创建。一个Compilation对象包含了当前的模块资源、编译生成资源、变化的文件等。Compilation对象也提供了很多事件回调供插件做扩展。
make一个新的Compilation创建完毕,即将从Entry开始读取文件,根据文件类型和配置的Loader对文件进行编译,编译完后再找出该文件依赖的文件,递归的编译和解析。
after-compile一次Compilation执行完成。这里会根据编译结果 合并出我们最终生成的文件名和文件内容。
invalid当遇到文件不存在、文件编译错误等异常时会触发该事件,该事件不会导致Webpack退出。

这里主要最重要的就是compilation过程,compilation实际上就是调用相应的loader处理文件生成chunks并对这些chunks做优化的过程。几个关键的事件(Compilation对象this.hooks中):

事件名解释
build-module使用对应的Loader去转换一个模块。
normal-module-loader在用Loader对一个模块转换完后,使用acorn解析转换后的内容,输出对应的抽象语法树(AST),以方便Webpack后面对代码的分析。
program从配置的入口模块开始,分析其AST,当遇到require等导入其它模块语句时,便将其加入到依赖的模块列表,同时对新找出的依赖模块递归分析,最终搞清所有模块的依赖关系
seal所有模块及其依赖的模块都通过Loader转换完成后,根据依赖关系开始生成Chunk。

输出阶段

事件名解释
should-emit所有需要输出的文件已经生成好,询问插件哪些文件需要输出,哪些不需要。
emit确定好要输出哪些文件后,执行文件输出,可以在这里获取和修改输出内容。
after-emit文件输出完毕。
done成功完成一次完成的编译和输出流程。
failed如果在编译和输出流程中遇到异常导致Webpack退出时,就会直接跳转到本步骤,插件可以在本事件中获取到具体的错误原因。

3 webpack 有哪些阶段

参考答案

  1. webpack的准备阶段
  2. modules和chunks的生成阶段
  3. 文件生成阶段

🎃专栏分享:

JavaScript相关面试题就更新到这里啦,相关 Web前端面试题 可以订阅专栏哦🥰
专栏地址:《面试必看》
面试刷题神器:牛客网


⏳ 名言警句:说能做的,做说过的!\textcolor{red} {名言警句:说能做的,做说过的!}名言警句:说能做的,做说过的!

✨ 原创不易,还希望各位大佬支持一下\textcolor{blue}{原创不易,还希望各位大佬支持一下}原创不易,还希望各位大佬支持一下

👍 点赞,你的认可是我创作的动力!\textcolor{green}{点赞,你的认可是我创作的动力!}点赞,你的认可是我创作的动力!

⭐️ 收藏,你的青睐是我努力的方向!\textcolor{green}{收藏,你的青睐是我努力的方向!}收藏,你的青睐是我努力的方向!

✏️ 评论,你的意见是我进步的财富!\textcolor{green}{评论,你的意见是我进步的财富!}评论,你的意见是我进步的财富!

相关内容

热门资讯

端午节祝福问候语 精选端午节祝福问候语27句  朋友不一定合情合理,但一定知心知意;不一定形影不离,但一定心心相惜;不...
美好祝福语 美好祝福语  在平时的学习、工作或生活中,大家总少不了要接触或使用祝福语吧,祝福语有助于人与人之间感...
周末朋友之间的祝福QQ信息 周末朋友之间的祝福QQ信息  1、倘若周一周五是为了生存而奋斗,那么周六和周日则是为了生活而享受。我...
教师节祝福诗词 教师节祝福诗词大全  教师节,旨在肯定教师为教育事业所做的贡献。在中国近现代史上,多次以不同的日期作...
正月十五元宵节祝福语微信 2020年正月十五元宵节祝福语微信锦集55句  月亮,映照着你的欢笑;汤圆,品尝着你的心愿;龙灯,飞...
的重阳节对联 2022的重阳节对联大全  在日常学习、工作抑或是生活中,大家对对联都再熟悉不过了吧,对联是在古代的...
小学开学祝福语简短 小学开学祝福语简短  夏天悄悄过去,留下多彩回忆,新的学期就要开始,愿你保持快乐的心情,接下来是小编...
父亲节日快乐的祝福语 父亲节日快乐的祝福语(精选205句)  在日常生活或是工作学习中,大家对祝福语都不陌生吧,祝福语就是...
校庆祝福语70条   1.创百年丰功,赖济济时贤,桃李芬芳溢四海。  2.朝搴阰之木兰兮,夕揽洲之宿莽。朋友们,珍惜在...
春天的对联 春天的对联  无论是在学校还是在社会中,许多人对一些广为流传的对联都不陌生吧,对联对仗工整,平仄协调...
圣诞节给朋友的祝福语短信摘录 圣诞节给朋友的祝福语短信摘录(精选65句)  无论是身处学校还是步入社会,大家或多或少都会用到过祝福...
微信五一劳动节祝福语 微信五一劳动节祝福语  五一劳动节快到了,愿幸福和快乐都能加倍,下面是YJBYS小编为大家搜集了关于...
简洁的新年祝福语 简洁的新年祝福语(精选80句)  在日常学习、工作抑或是生活中,大家都有写祝福语的经历,对祝福语很是...
公司年会祝福语 公司年会祝福语15篇  在日常学习、工作抑或是生活中,大家都经常接触到祝福语吧,祝福语可以给人们带去...
经典的春节祝福语 2019年经典的春节祝福语  1、猪年到来喜事多,阖家团员幸福多;心情愉快朋友多,身体健康快乐多;一...
鼠年春节拜年祝福语 鼠年春节拜年祝福语大全  在平平淡淡的学习、工作、生活中,大家总少不了要接触或使用祝福语吧,祝福语的...
国庆节祝福语 精选国庆节祝福语大全  在日常学习、工作或生活中,大家总免不了要接触或使用祝福语吧,祝福语不限制字数...
妻子送老公生日蛋糕祝福语 妻子送老公生日蛋糕祝福语(精选55句)  在日常学习、工作或生活中,大家一定都接触过祝福语吧,祝福语...
元旦新年贺卡祝福语 精选元旦新年贺卡祝福语大集合47句  元旦已到,愿你财运如沸水升腾;愿你事业麻辣烫般红火;愿你爱情像...
除夕祝福语短信25条 2022年除夕祝福语短信25条  烟花璀璨炫人眼,鞭炮声响乐连连;家家团聚喜团圆,喜在心间笑开颜;除...