前端面试题大合集7----模块化/工程化/ES6+标准

一、简述webpack的核心原理

(1)一切皆模块

正如JS文件可以是一个“模块”一样,其它的文件也可视作模块。因此可以执行require(myJsFile.js),亦可执行require(myCssFile.css),这意味着我们可以将事物分割成更小的、易于管理的片段,从而达到重复利用的目的。

(2)按需加载

传统的模块打包工具最终将所有的模块编译并生成一个庞大的bundle.js文件。但是,在真实的APP里,bundle.js文件的大小在10M-15M之间的话,可能会导致应用一直处于加载状态。因此,webpack使用许多特性来分割代码,然后生成多个bundle.js文件,而且异步加载部分代码用于实现按需加载。

二、webpack打包流程

具体流程如下:

  1. 通过entry配置入口文件;
  2. 通过output制定输出文件;
  3. 使用各种loader处理CSS、JavaScript、image等资源,并将它们编译与打包成浏览器可以解析的内容等。
三、webpack中的loader
  • 具体作用:

(1)实现对不同格式文件的处理,比如将scss转换为css,或将TypeScript转化为JavaScript;

(2)可以编译文件,从而使其能够添加到依赖关系中。loader是webpack最重要的部分之一。通过使用不同的loader,我们能够调用外部的脚本或者工具,实现对不同格式文件的处理,loader需要在webpack.config.js里单独用module进行配置。

  • 叙述工作中常用的loader

babel-loader:将下一代的JS语法规范转换成现代浏览器能够支持的语法规范。因为babel有些复杂,所以大多数开发者都会新建一个.babelrc进行配置。

css-loader、style-loader:这两个建议配合使用,用来解析css文件依赖。

less-loader、sass-loader:分别用来解析less文件,sass文件。

file-loader:生成的文件名就是文件内容的MD5散列值,并会保留所引用资源的原始扩展名。

url-loader:功能类似于file-loader,但是当文件大小低于指定的限制时,可以返回一个DateUrl。 

四、简述webpack的plugins和loaders有什么区别

(1)作用不同

  • loader直译为「加载器」,作用是让webpack拥有加载和解析非JS文件的能力,是用来加载文件的。
  • plugin直译为「插件」,可以拓展webpack的功能,让webpack具有更多的灵活性。在webpack运行的生命周期中会广播出许多事件,plugin可以监听这些事件,在合适的时机通过webpack提供的API改变输出结果。

(2)用法不同

  • loader在module.rules中配置,也就是说他作为模块的解析规则存在,类型为数组,每一项都是一个Object,里面描述了对于什么类型的文件,使用什么加载和使用的参数。
  • plugin在plugins中单独配置。类型为数组,每一项事宜额plugin的实例,参数都通过构造函数传入。

(3)常见的loader和plugin

  • 常见的loader:

样式:style-loader、css-loader、less-loader、sass-loader等;
文件:raw-loader、file-loader 、url-loader等可以处理资源;
编译:babel-loader(把 ES6 转换成 ES5)、coffee-loader 、ts-loader等;
vue-loader、coffee-loader、babel-loader等可以将特定文件格式转成js模块、将其他语言转化为js语言和编译下一代js语言;

  • 常见的plugin:

内置UglifyJsPlugin:压缩代码,通过UglifyES压缩ES6代码;

内置CommonsChunkPlugin:提取公共代码,提高打包效率,将第三方库和业务代码分开打包;

ProvidePlugin:自动加载模块,代替require和import;

  new webpack.ProvidePlugin({$: 'jquery',jQuery: 'jquery'})

html-webpack-plugin:可以根据模板自动生成html代码,并自动引用css和js文件;

extract-text-webpack-plugin:将js文件中引用的样式单独抽离成css文件;

HotModuleReplacementPlugin:热更新插件,修改代码后,自动刷新,实时预览修改后的效果。

五、webpack如何切换开发环境和生产环境

生产环境与开发环境的区别无非就是调用的接口地址、资源存放路径、线上的资源是否需要压缩等方面。目前的做法是在package.json中设置node的一个全局变量,然后在webpack.config.js文件里面进行开发环境与生产环境的配置切换。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/17726.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

堆排序和Topk问题

堆排序 堆排序即利用堆的思想来进行排序, 总共分为两个步骤: 1. 建堆 升序:建大堆; 降序:建小堆 2 .利用堆删除思想来进行排序 利用堆删除思想来进行排序 建堆和堆删除中都用到了向下调整,因此掌握了…

外卖系统关于redis使用解决高并发情况

1、如何配置redis 在java中操作redis 操作步骤: 1、导入Spring Data Redis的maven坐标 2、配置Redis数据源 3、编写配置类,创建RedisTemplate对象 4、通过RedisTemplate对象操作Redis 2、Redis结合Lua脚本 减少网络开销:使用Lua脚本&#xf…

FolkMQ v1.5.1 发布(“新式”国产消息中间件)

FolkMQ 是个“新式”的消息中间件。强调:“小而巧”、“简而强”。 功能简表 角色功能生产者(客户端)发布普通消息、Qos0消息、定时消息、顺序消息、可过期消息、事务消息、广播消息消费者(客户端)订阅、取消订阅。消…

前端面试题日常练-day27 【面试题】

题目 希望这些选择题能够帮助您进行前端面试的准备,答案在文末。 1. 在Vue中,以下哪个选项可以用于监听数据的变化并执行相应的操作? a) computed b) methods c) data d) watch 2. 在Vue中,以下哪种方式可以实现组件之间的通信…

中医理疗元宇宙 科技赋能中医药产业走向国际市场

基于380亿参数量,对中医药海量文本进行数据训练,实现方剂优化、机制阐释和新适应症的精准发现……日前在天津召开的数智赋能大健康产业新质生产力暨第四届中医药国际发展大会上,由天士力医药集团与华为云共同开发的“数智本草”中医药大模型正…

37. 解数独 - 力扣(LeetCode)

基础知识要求: Java: 方法、for循环、if else语句、数组 Python: 方法、for循环、if else语句、列表 题目: 编写一个程序,通过填充空格来解决数独问题。 数独的解法需 遵循如下规则: 数字 1-9 在每一行…

Windows搭建Nginx代理本地盘的文件(共享路径或本地路径)

文章目录 Windows搭建Nginx代理本地盘的文件 - 前言需求背景挂载网络共享路径检查连接状态下载Nginx编辑 Nginx 配置文件启动 Nginx检测Nginx是否成功启动使用方法远程共享路径示例本地文件示例 测试 Windows搭建Nginx代理本地盘的文件 - 前言 在开发过程中,确保文…

ChatGPT Mac客户端 下载安装教程(免费 不限次数使用 还支持语音聊天)

ChatGPT Mac客户端 下载安装教程(免费 不限次数使用 还支持语音聊天) 原文链接:https://blog.csdn.net/weixin_48311847/article/details/139248625 免费 不限次数使用 还支持语音聊天

mysql 排序、查询执行流程、幻读

文章目录 MySQL的 ORDER BY 执行流程示例表和查询语句执行流程全字段排序Rowid 排序全字段排序 VS rowid排序联合索引优化覆盖索引优化 小结思考题问题执行过程中是否需要排序?如何在数据库端实现不排序?实现分页需求 使用ORDER BY RAND()内存临时表与磁…

ANDROID OLLVM 混淆配置

安装环境 MacOSGITCMAKENDK - 21.1.6352462 步骤 1. 编译项目 此项目版本较低 https://github.com/obfuscator-llvm/obfuscator ,我们使用 https://github.com/heroims/obfuscator 进行编译 git clone https://github.com/heroims/obfuscator.gitcd obfuscator…

曼城四连冠,剑南春与万千球迷共同见证“荣耀时刻”

执笔 | 洪大大 编辑 | 扬 灵 5月19日,英超2023-2024赛季第38轮比赛全面开打,凭借队员的出色发挥,曼城最终以3-1战胜西汉姆联,成功捧起了英超联赛的奖杯,成为英格兰足球顶级联赛100多年历史上第一支成就四连冠的豪门…

事务报错没有显示回滚导致DDL阻塞引发的问题

在业务开发过程中,显示的开启事务并且在事务处理过程中对不同的情况进行显示的COMMIT或ROLLBACK,这是一个完整数据库事务处理的闭环过程。 这种在应用开发逻辑层面去handle的事务执行的结果,既确保了事务操作的数据完整性,又遵循了…

简单句语法

简单句是指包含一个主语和一个谓语的句子,它表达一个完整的思想。简单句是构成更复杂句子的基础。 简单句的两种基本结构 简单句可以分为两种基本结构: 主谓结构: 描述主语所做的动作或行为,也就是 “做什么”。 主系结构: 描述主语的状态…

Python2和Python3对utf8的实现方式有什么区别?

# -*- coding: utf8 -*- 是一个特殊的文件头部注释,通常出现在Python 2的源代码文件的开头。这个注释告诉Python解释器,该源文件使用的是UTF-8编码。这对于包含非ASCII字符(例如中文字符、特殊符号等)的Python源代码文件来说非常重…

探索未来设计新境界,PSAI插件 艺术创作神器来袭!

想象一下,如果有一个工具,能够让你的设计工作变得既简单又高效,那会是怎样的体验?现在,梦想成真了! 这是一款革命性的PSAI设计插件,专为创意人士打造。它将彻底改变你的设计流程,让你…

【OpenCV】像素信息统计

介绍了计算像素均值、方差的API,以及统计像素信息的方法。相关API: minMaxLoc()mean()meanStdDev() 代码: #include "iostream" #include "opencv2/opencv.hpp"using namespace std; using namespace cv;int main(int…

谈谈如何建立可落地的数字化转型战略

数字化转型战略是指将数字技术集成到企业或组织的所有领域,从根本上改变其运营方式以及为客户提供价值的方式。它涉及采用新技术并重新思考现有业务流程,以提高效率、生产力和客户满意度。 成功的数字化转型战略需要采用涉及人员、流程和技术的整体方法。…

【全开源】JAVA同城搬家系统源码小程序APP源码

JAVA同城搬家系统源码 特色功能: 强大的数据处理能力:JAVA提供了丰富的数据结构和算法,以及强大的并发处理能力,使得系统能够快速地处理大量的货物信息、司机信息、订单信息等,满足大规模物流的需求。智能路径规划&a…

香橙派 AIPro开发板上手测评

前言 最近拿到了一个新玩具:香橙派 AIPro。一个只比银行卡大一点点的开发板能带给我们多少惊喜呢?接下来就跟我一起来体验下这块开发板的魅力。 一、硬件配置 CPU:配备了4核64位ARM处理器,其中默认预留1个给AI处理器使用 NPU&am…

SpringBoot和Apache Doris实现实时广告推荐系统

本专题旨在向读者深度解读Apache Doris技术,探讨其与SpringBoot框架结合在各类实际应用场景中的角色与作用。本专题包括十篇文章,每篇文章都概述了一个特定应用领域,如大数据分析、实时报告系统、电商数据分析等,并通过对需求的解析、解决方案的设计、实际应用示例的展示以…