面试重点:webpack
webpack
熟练掌握Webpack的常用配置,能够自己构建前端环境,并进行项目优化;
001.谈谈你对webpack的看法:
webpack是一个模块打包工具,可以使用它管理项目中的模块依赖,并编译输出模块所需的静态文件。它可以很好地管理、打包开发中所用到的HTML,CSS,JavaScript和静态文件(图片,字体)等,让开发更高效。对于不同类型的依赖,webpack有对应的模块加载器,而且会分析模块间的依赖关系,最后合并生成优化的静态资源。
002.webpack的基本功能和工作原理?
代码转换:TypeScript 编译成 JavaScript、SCSS 编译成 CSS 等等
文件优化:压缩 JavaScript、CSS、HTML 代码,压缩合并图片等
代码分割:提取多个页面的公共代码、提取首屏不需要执行部分的代码让其异步加载
模块合并:在采用模块化的项目有很多模块和文件,需要构建功能把模块分类合并成一个文件
自动刷新:监听本地源代码的变化,自动构建,刷新浏览器
代码校验:在代码被提交到仓库前需要检测代码是否符合规范,以及单元测试是否通过
自动发布:更新完代码后,自动构建出线上发布代码并传输给发布系统。
003.webpack构建过程:
从entry里配置的module开始递归解析entry依赖的所有module,
每找到一个module,就会根据配置的loader去找对应的转换规则。
对module进行转换后,再解析出当前module依赖的module
这些模块会以entry为单位分组,一个entry和其所有依赖的module被分到一个组Chunk。
最后webpack会把所有Chunk转换成文件输出
在整个流程中webpack会在恰当的时机执行plugin里定义的逻辑
004.webpack打包原理:
将所有依赖打包成一个bundle.js,通过代码分割成单元片段按需加载。
005.什么是entry,output?
entry 入口,告诉webpack要使用哪个模块作为构建项目的起点,默认为./src/index.js
output 出口,告诉webpack在哪里输出它打包好的代码以及如何命名,默认为./dist
006.什么是loader,plugins?
loader是用来告诉webpack如何转换某一类型的文件,并且引入到打包出的文件中。
plugins(插件)作用更大,可以打包优化,资源管理和注入环境变量
007.什么是bundle,chunk,module?
bundle是webpack打包出来的文件,chunk是webpack在进行模块的依赖分析的时候,代码分割出来的代码块。module是开发中的单个模块
008.npm打包时需要注意哪些?如何利用webpack来更好的构建?
完善基本信息;
定义依赖;
忽略文件;
打标签;
009.有哪些常见的Loader?他们是解决什么问题的?
file-loader:把文件输出到一个文件夹中,在代码中通过相对 URL 去引用输出的文件;
url-loader:和 file-loader 类似,但是能在文件很小的情况下以 base64 的方式把文件内容注入到代码中去;
source-map-loader:加载额外的 Source Map 文件,以方便断点调试;
image-loader:加载并且压缩图片文件;
babel-loader:把 ES6 转换成 ES5;
css-loader:加载 CSS,支持模块化、压缩、文件导入等特性;
style-loader:把 CSS 代码注入到 JavaScript 中,通过 DOM 操作去加载 CSS;
eslint-loader:通过 ESLint 检查 JavaScript 代码;
010.webpack规范:
webpack默认遵循commonjs规范 module.exports
使用webpack进行打包时有两种模式:
开发模式:主要是用于测试,代码调试等;
生产模式:要考虑性能问题,要压缩 如果没有插件 就不会压缩;
默认情况下webpack的配置文件叫webpack.config.js,可以通过--config指定webpack的配置文件名
011.配置流程:
你可以尝试配置脚手架吗?可以
012.loader:
css需要两个loader来处理:css-loader style-loader
postcss-loader 他提供了一种方式用 JavaScript 代码来处理 CSS。它负责把 CSS 代码解析成抽象语法树结构(Abstract Syntax Tree,AST),再交由插件来进行处理。
-webkit-transform: rotate(45deg);
transform: rotate(45deg);
mini-css-extract-plugin 以前都是之间引入内部样式,把css专门打包成一个css文件,在index.html文件中引入css
optimize-css-assets-webpack-plugin css压缩
terser-webpack-plugin css压缩 js不能压缩了,然后有一个插件,能压缩js
file-loader 是让webpack打包图片
url-loader可以让图片转化base64,也可以让webpack打包图片
webpack 默认情况下不支持js的高级语法,所以需要使用babel;
babel转化; npm i @babel/core @babel/preset-env babel-loader --save-dev
013.plugins:
html-webpack-plugin 根据模块生成一个html文件 此时不会在dist文件夹下面新建index文件了
我需要在public新建 index文件
根据这个模板文件 在内存中生成 index.html 然后自动引入bundle.js
clean-webpack-plugin 去掉没有用到的模块
014.loader与plugin的区别?
- loader是使webpack拥有加载和解析非js文件的能力
- plugin 可以扩展webpack的功能,使得webpack更加灵活。可以在构建的过程中通过webpack的api改变输出的结果
作者:YXi
链接:https://juejin.im/post/5de36f2de51d4542e64ae38f
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
面试重点:webpack的更多相关文章
- C C++ OC iOS面试重点问题(一)
C C++ OC iOS面试重点问题(一) 1.字符串常量需要加\0 2.逻辑运算 位操作(经典:实现两个数的交换) 3.关键字 4.引用和指针的区别和联系 5.如何引用一个已经定义过的全局变量? ...
- javaEE面试重点
Hibernate工作原理及为什么要用? 原理: 1. 读取并解析配置文件 2. 读取并解析映射信息.创建SessionFactory 3. 打开Sesssion 4. 创建事务Transation ...
- 笔试、面试重点总结:WIN32、MFC与Linux
win32 1. Win32应用程序的基本类型. 2. 创建win32窗口程序的几个步骤,及使用到的函数. 3. nmake 与 makefile. 4. 有哪些字符集? Win32对于各种字符集如何 ...
- Java虚拟机面试重点-------------内存分配和回收策略
1 对象优先分配在Eden区 对象优先在Eden进行分配,大多数情况下,对象在新生代Eden区进行分配.当Eden区没有足够的空间进行分配时,虚拟机会发起一次Minor GC. 新生代GC(Ninor ...
- day_5.26python面试重点
列表生成式: ''' 2018-5-26 19:40:58 生成器(generator):在Python中,这种⼀边循环⼀边计算的机制. ''' # 第一种实现 :只要把⼀个列表⽣成式的[ ]改成( ...
- JAVA 面试重点知识个人总结
一.集合: 1 .Collection(是java.util下的接口) 和 Collections(是java.util下的类). 2 .List, Set,是否继承自Collection接口,Map ...
- C/C++ 多线程(程序猿面试重点)CodeBlocks-CB的pthreads使用
C++ 多线程 本文主要讲一下C++多线程 线程好处 ·使用线程可以把占据长时间的程序中的任务放到后台去处理 ·程序的运行速度可能加快 可以释放一些珍贵的资源如内存占用等等. 但是多线程是为了同步完成 ...
- 25、前端知识点--webpack篇之面试考点
前端面试之webpack篇 https://blog.csdn.net/sinat_17775997/article/details/78122999 关于webpack的面试题 随着现代前端开发的复 ...
- 程序员面试大揭秘——应聘微软、亚马逊、谷歌、苹果等IT公司你都要做什么准备?
对于多数求职者而言,面试好似一个迷局.你去了,见了几个面试官,答了一堆问题,然后,或两手空空离开,或幸运地拿到录用通知. 你有没有想过: 面试结果是怎么得出的? 面试官会不会互相交流? 公司最看重哪些 ...
- 「mysql优化专题」90%程序员面试都用得上的索引优化手册(5)
目录(技术文) 多关于索引,分为以下几点来讲解: 一.索引的概述(什么是索引,索引的优缺点) 二.索引的基本使用(创建索引) 三.索引的基本原理(面试重点) 四.索引的数据结构(B树,hash) 五. ...
随机推荐
- 吉特日化MES & SQL Server 无法执行数据库脚本
打开服务器打算远程执行一下脚本,突发发现数据库无法执行脚本,就想着是不是安装了 海康AGV 控制系统的问题导致,问题如下: 问题截图如下: 报错信息如下: ====================== ...
- Qt+FFmpeg仿VLC接收RTSP流并播放
关键词:Qt FFmpeg C++ RTSP RTP VLC 内存泄漏 摘要认证 花屏 源码 UDP 本系列原文地址. 下载直接可运行的源码,在原文顶部. 效果 产生RTSP流 比播放文件复杂一点是, ...
- 2023-12-20:用go语言,给定一个数组arr,长度为n,在其中要选两个不相交的子数组。 两个子数组的累加和都要是T,返回所有满足情况中,两个子数组长度之和最小是多少? 如果没有有效方法,返回-
2023-12-20:用go语言,给定一个数组arr,长度为n,在其中要选两个不相交的子数组. 两个子数组的累加和都要是T,返回所有满足情况中,两个子数组长度之和最小是多少? 如果没有有效方法,返回- ...
- Harbor安装和镜像推送
安装前提: yum -y install docker-compose-plugin 安装: tar -zxvf harbor-offline-installer-v2.6.1.tgz cd harb ...
- Scrapy自带的断点续爬JOB-DIR参数
参考官方文档:https://docs.scrapy.org/en/latest/topics/jobs.html?highlight=JOBDIR#jobs-pausing-and-resuming ...
- 数字孪生和GIS结合将会为智慧园区带来怎样的改变?
数字孪生和地理信息系统(GIS)是当今智慧园区发展中的两个重要技术,它们的结合将为智慧园区带来根本性的改变和巨大的发展机遇.这种结合将深刻影响园区的规划.建设.运营和管理,为人们创造更智能.高效.可持 ...
- 【Python】【OpenCV】边缘检测和创建自定义核
对于使用OpenCV已有的算子,我们还可以自定义卷积核以达到不同的效果. filters.py 1 import cv2 2 import numpy 3 4 """ 定 ...
- JS的对象
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- Ubuntu安装Maridb 10.5版本
以20.04版本为例 Ubutun20.04自带源默认安装的mariadb版本为10.3不符合安装zabbix6.0的要求 打开MariaDB的官方网站:https://mariadb.org/mar ...
- 微信小程序中业务域名的配置
需要配置业务域名,需要先将域名http转https 1,首先在该微信小程序的公众号平台中下载 业务域名的证书 2,将下载的证书放进nginx的根目录 3,在nginx中 (root为.txt的地址)