前端面试题整理—Webpack篇
1、什么是webpack,与grunt和gulp有啥不同
webpack是一个模块打包工具,在webpack里面一切皆模块
通过loader转换文件,通过plugin注入钩子,最后输出有多个模块组合成的文件
WebPack可以看做是模块打包机:它做的事情是,分析你的项目结构,找到Js模块以及其它的一些浏览器不能直接运行的拓展语言,并将其打包为合适的格式以供浏览器使用
Gulp/Grunt是一种能够优化前端的开发流程的工具,而WebPack是一种模块化的解决方案,不过Webpack的优点使得在很多场景下可以替代Gulp/Grunt类的工具
Grunt和Gulp的工作方式是:在一个配置文件中,指明对某些文件进行类似编译,组合,压缩等任务的具体步骤,工具之后可以自动替你完成这些任务
Webpack的工作方式是:把你的项目当做一个整体,通过一个给定的主文件(如:index.js),Webpack将从这个文件开始找到你的项目的所有依赖文件,使用 loaders处理它们,最后打包为一个(或多个)浏览器可识别的JavaScript文件
gulp和grunt需要开发者将整个前端构建过程拆分成多个Task,并合理控制所有Task的调用关系
webpack需要开发者找到入口,并需要清楚对于不同的资源应该使用什么Loader做何种解析和加工
2、webpack的优缺点
优点:
1)专注于处理模块化的项目,能做到开箱即用,一步到位
2)可通过plugin扩展,方便、灵活
3)社区庞大活跃,经常引入新特性
4)良好的开发体验
webpack的缺点是只能用于采用模块化开发的项目
3、分别介绍bundle,chunk,module是什么
bundle:是由webpack打包出来的文件
chunk:代码块,一个chunk由多个模块组合而成,用于代码的合并和分割
module:是开发中的单个模块,一个模块对应一个文件,webpack会从配置的entry中递归开始找出所有依赖的模块
4、什么是loader? 什么是plugin,两者区别
loader:模块转换器,用于把模块原内容按照需求转换成新内容
通过使用不同的Loader,Webpack可以要把不同的文件都转成JS文件,比如CSS、ES6/7、JSX等
plugin:扩展插件
在 Webpack 构建流程中的特定时机注入扩展逻辑来改变构建结果或做你想要的事情
一个插件是含有apply方法的一个对象,通过这个方法可以参与到整个webpack打包的各个流程
loader是用来对模块的源代码进行转换,而插件目的在于解决 loader 无法实现的其他事
因为plugin可以在任何阶段调用,能够跨Loader进一步加工Loader的输出
5、什么是模块热更新?
模块热更新是webpack的一个功能,他可以使得代码修改过后不用刷新浏览器就可以更新,是高级版的自动刷新浏览器
devServer中通过hot属性可以空时模块的热替换
//通过配置文件
const webpack = require('webpack');
const path = require('path');
let env = process.env.NODE_ENV == "development" ? "development" : "production";
const config = {
mode: env,
devServer: {
hot:true
}
}
plugins: [
new webpack.HotModuleReplacementPlugin(), //热加载插件
],
module.exports = config;
6、几个常见的plugin和常见的loader
plugin:
html-webpack-plugin 为html文件中引入的外部资源,可以生成创建html入口文件
mini-css-extract-plugin 分离css文件
clean-webpack-plugin 删除打包文件
HotModuleReplacementPlugin 热更新应用
copy-webpack-plugin 拷贝静态文件
terser-webpack-plugin 通过TerserPlugin压缩ES6代码
loader:
css-loader 加载 CSS,支持模块化、压缩、文件导入等特性
image-loader 加载并且压缩图片文件
babel-loader 把 ES6 转换成 ES5
style-loader 把 CSS 代码注入到 JavaScript 中,通过 DOM 操作去加载 CSS
file-loader 把文件输出到一个文件夹中,在代码中通过相对 URL 去引用输出的文件
source-map-loader 加载额外的 Source Map 文件,以方便断点调试
7、如何可以自动生成webpack配置?
webpack-cli /vue-cli /etc ...脚手架工具
8、webpack-dev-server和http服务器如nginx有什么区别?
webpack-dev-server使用内存来存储webpack开发环境下的打包文件
并且可以使用模块热更新,他比传统的http服务对开发更加简单高效。
9、webpack构建过程
从entry里配置的module开始递归解析entry依赖的所有module
每找到一个module,就会根据配置的loader去找对应的转换规则
对module进行转换后,再解析出当前module依赖的module
这些模块会以entry为单位分组,一个entry和其所有依赖的module被分到一个组Chunk
最后webpack会把所有Chunk转换成文件输出
在整个流程中webpack会在恰当的时机执行plugin里定义的逻辑
10、什么是entry,output
entry入口,告诉webpack要使用哪个模块作为构建项目的起点,默认为./src/index.js
output出口,告诉webpack在哪里输出它打包好的代码以及如何命名,默认为./dist
11、webpack如何配置单页面和多页面的应用程序?
//单个页面
module.exports = {
entry: './path/to/my/entry/file.js'
}
//多页面应用程序
module.entrys = {
entry: {
pageOne: './src/pageOne/index.js',
pageTwo: './src/pageTwo/index.js'
}
}
12、什么是长缓存?在webpack中如何做到长缓存优化?
浏览器在用户访问页面的时候,为了加快加载速度会对用户访问的静态资源进行存储,但是每一次代码升级或更新都需要浏览器下载新的代码,最简单方便的方式就是引入新的文件名称
webpack中可以在output中指定chunkhash,并且分离经常更新的代码和框架代码。通过NameModulesPlugin或HashedModuleIdsPlugin使再次打包文件名不变
Git篇
1、Git和SVN的区别
git是分布式版本控制,svn是集中式版本控制(核心区别)
git相对于svn的优势就是不需要网络即可版本控制
git把内容按数据方式存储,而SVN是按文件
git可以是公用的,可以分享,svn基本是公司内部才能访问,网外不方便访问
git不依赖中央服务器,即使服务器有问题也不受影响,svn依赖服务器,一旦服务器有问题就会受影响
git没有一个全局的版本号,svn有
2、git工作流程
1)在工作目录中修改某些文件
2)对修改后的文件进行快照,然后保存到暂存区域
3)提交更新,将保存在暂存区域的文件快照永久转储到Git目录中
3、fetch、merge、pull的区别
pull相当于git fetch 和git merge,即更新远程仓库的代码到本地仓库,然后将内容合并到当前分支
git fetch:相当于是从远程获取最新版本到本地,不会自动merge
git merge:将内容合并到当前分支
git pull:相当于是从远程获取最新版本并merge到本地
4、分支的相关命令
创建分支:git branch 分支名
查看分支:git branch
切换分支:git checkout 分支名
创建并切换分支:git checkout -b 分支名
合并分支:git merge
查看已经合并的分支/未合并的分支:git branch --merge / git branch --no-merge
删除的已合并的分支/未合并的分支:git branch -d 分支名 / git branch -D 分支名
5、git merge和git rebase的区别
两个都代表合并
git merge操作会在当前分支上生成一个新的commit节点,并保留所有的操作历史节点,会按照commit时间顺序排列
rebase操作后的历史并不会按commit时间顺序排列, 一旦分支中的提交对象发布到公共仓库,就不要对该分支进行rebase操作
6、解决分支合并冲突
分支提交冲突:当分支对某文件某句话进行修改后,切换到主分支也对该文件该句话进行修改,使用git merge进行合并,需要将两个修改进行合并。此时合并产生冲突
解决方法:
1)git status查看冲突文件
2)编辑器打开冲突文件,查看内容。Git用<<<<<<<,=======,>>>>>>>标记出不同分支的内容
3)修改文件内容
4)提交 git add file ; git commit -m ""
查看分支合并图 git log –graph
7、Git配置相关
8、git常用的命令
/*
1)从远程库中克隆项目
git clone 项目地址 2)工作区到暂存区
git add 文件名字、git add . 多个文件操作 3)暂存区到版本区
git commit -m"注释信息" 4)把版本区文件上传到远程仓库
git push origin master 5)将远程仓库的文件拉取/下载下来
git pull origin master 6)查看当前历史记录、查看所有的操作记录
git log、git reflog 7)查看文件状态
git status 8)查看版本信息
git version 9)查看配置信息
git config --list 10)在当前目录新建一个Git代码库(生成隐藏.git文件)
git init 11)版本回退
git reset --hard 版本id 12)查看xx文件修改了哪些内容
git diff xx 13)删除文件名
git rm 文件名 14)恢复一个文件
git checkout 15)关联一个远程库
git remote add [远程仓库git地址] 16)移除关联一个远程库
git remote remove [远程仓库git地址] 17)创建分支
git branch 分支名 18)查看分支数量
git branch 19)切换分支
git checkout 分支名 20)创建并切换分支
git checkout -b 分支名 21)当文件修改时切换分支
git stash 暂存文件 22)合并分支
git merge 23)合并指定分支到当前分支
git merge [branch] 24)查看已合并的分支
git branch --merge 25)查看未合并的分支
git branch --no-merge 26)查看远程分支
git branch -r 27)删除未合并的分支
git branch -D 分支名 28)删除已合并的分支
git branch -- 29)删除远程分支
git branch -d 分支名 30)生成一个可供发布的压缩包
git archive */
9、什么是 fork?fork、分支和克隆之间有什么区别
fork是对存储仓库进行拷贝
clone克隆是个对某个远程仓库的本地拷贝,实际上是拷贝整个源存储仓库,包括所有历史记录和分支
branch分支是一种机制,用于处理单一存储仓库中的变更,并最终目的是用于与其他部分代码合并
10、什么时候应使用 “git stash”?
git stash 命令把你未提交的修改保存以供后续使用,以后就可以从工作副本中进行还原
前端面试题整理—Webpack篇的更多相关文章
- 前端面试题整理—Vue篇
1.对vue的理解,有什么特点,vue为什么不能兼容IE8及以下浏览器 vue是一套用于构建用户界面的渐进式框架,核心是一个响应的数据绑定系统 vue是一款MVVM框架,基于双向绑定数据,当数据发生 ...
- 前端面试题整理——webpack相关考点
webpack是开发工具,面试考点重点在配置和使用,原理理解不需要太深. 一.基本配置 1.拆分配置和merge 将公共配置跟dev和prod的配置拆分,然后通过webpack-merge对配置进行整 ...
- 前端面试题整理—Node篇
1.node有哪些特征,与其他服务器端对比 特征:单线程.事件驱动.非阻塞I/O node 无法直接渲染静态页面,提供静态服务 node 没有根目录的概念 node 必须通过路由程序指定文件才能渲染文 ...
- 前端面试题整理—React篇
1.说一下React React是Facebook 开发的前端JavaScript库 V层:react并不是完整的MVC框架,而是MVC中的C层 虚拟DOM:react引入虚拟DOM,每当数据变化通过 ...
- 前端面试题整理—JavaScript篇(一)
1.JS的基本数据类型和引用数据类型有哪些,两者区别 基本数据类型->string.number.Boolean.null.undefined.symbol 引用数据类型->array.o ...
- 前端面试题整理—ajax篇
1.什么是Ajax和JSON,它们的优缺点 Ajax是全称是asynchronous JavaScript andXML,即异步JavaScript和xml,用于在Web页面中实现异步数据交互,实现页 ...
- 前端面试题整理—HTTP篇
1.常见的HTTP方法有哪些? GET: 用于请求访问已经被URI(统一资源标识符)识别的资源,可以通过URL传参给服务器 POST:用于传输信息给服务器,主要功能与GET方法类似,但一般推荐使用PO ...
- 前端面试题整理—JavaScript篇(二)
1.使用js实现一个可持续的动画 2.实现一个可以自由拖动的悬浮框 3.实现一个倒计时效果 4.使用js仿写一个原生下拉列表框 5.创建10个<a>标签,点击的时候弹出对应的序号 6.实现 ...
- 前端面试题整理—jQuery篇
1.为什么使用jquery,他有哪些好处? 1)轻量级.代码简洁 2)强大的选择器,出色的DOM操作封装 3)有可靠的事件处理机制 4)浏览器兼容性好 5)支持链式操作 6)支持丰富的插件 2.jqu ...
随机推荐
- 放下技术,是PM迈出的第一步
上一篇,我们从项目层面提出了PM的核心能力架构.今天,我想从公司层面,分析一下PM的核心能力架构中的过程能力,这也是PM当下最关心.最真切的痛点. 还记得上一篇我的同事老A吗? 为什么他能在知名外企带 ...
- 关于Java中基类构造器的调用问题
在<Java编程思想>第7章复用类中有这样一段话,值得深思.当子类继承了父类时,就涉及到了基类和导出类(子类)这两个类.从外部来看,导出类就像是一个与基类具有相同接口的新类,或许还会有一些 ...
- 应用shell脚本停启Tomcat
最近在工作中频繁的操作多个tomcat,顺便就简单研究了一下 一. 简介 Shell 是一种与操作系统直接交互的程序,Unix系统中叫Bourne Shell,包括以下几种 Sh—Bourne She ...
- Rx响应式编程
RX响应式编程就是异步数据流编程:单击事件或事件总线;(观察者模式) 有一堆的函数能够创建流,也能将任何流-,也能将任何流进行组合和过滤.一个流能够作为另一个流的输入,能够将两个流合并,可以通过过滤流 ...
- C# ComboBox绑定值问题
使用这种方式始终绑定值有问题: cbxSchool.DataSource = schoolList; cbxSchool.DisplayMember = "school_name" ...
- c/c++ 模板 类型推断
模板类型的推断 下面的函数f是个模板函数,typename T.下表是,根据调用测的实参,推断出来的T的类型. 请注意下表的红字部分, f(T&& t)看起来是右值引用,但其实它会根据 ...
- Making A Circle Out Of Squares
方形画圆 解决方案: 循环偏移5角度画方形 效果图: Python 源码 import turtle; window = turtle.Screen(); window.bgcolor("p ...
- 015_python原生在线调试工具
一.pdb https://docs.python.org/3/library/pdb.html
- 02-MySQL基础
MySQL基础 1.存储引擎 1.1MyISAM MySQL5.5以及之前默认存储引擎MyISAM 如果应用是以读操作和插入操作为主,只有很少的更新和删除操作,并且对事务的完整性.并发性要求不高,那么 ...
- 03SpringBoot用JdbcTemplates访问Mysql
03SpringBoot用JdbcTemplates访问Mysql 文章指导 学习笔记 学习代码 初始化mysql -- create table `account` DROP TABLE `acco ...