位置: IT常识 - 正文

前端面试题整理——webpack相关考点(前端面试题汇总.pdf)

编辑:rootadmin
webpack是开发工具,面试考点重点在配置和使用,原理理解不需要太深。 一、基本配置 1、拆分配置和merge 将公共配置跟dev和prod的配置拆分,然后通过webpack-merge对配置进行整合。 2、启动本地服务 dev环境启动devserver配置。 3、处理ES6 使用babel-lo ...

推荐整理分享前端面试题整理——webpack相关考点(前端面试题汇总.pdf),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:前端面试题目100及最佳答案,前端面试题大全,前端面试题2020及答案 知乎,前端面试题2020及答案 知乎,前端面试题目100及最佳答案,前端面试题汇总.pdf,前端面试题整理怎么做,前端面试题大全,内容如对您有帮助,希望把文章链接给更多的朋友!

webpack是开发工具,面试考点重点在配置和使用,原理理解不需要太深。

一、基本配置

1、拆分配置和merge

将公共配置跟dev和prod的配置拆分,然后通过webpack-merge对配置进行整合。

2、启动本地服务

dev环境启动devserver配置。

3、处理ES6

使用babel-loader,针对对应目录的js进行代码转换。

4、处理样式

使用postcss-loader、css-loader、style-loader等,这里有个考点是loader的执行顺序是从后往前执行。

5、处理图片

在dev环境直接使用file-loader进行图片的直接引用,prod环境会使用url-loader对小图片进行base64编码。

6、模块化

webpack天生支持模块化。

二、高级配置

1、配置多入口

entry设置多入口文件,在output输出文件使用[name]根据entry的key动态生成输出文件名

plugins要设置多个HtmlWebpackPlugin,根据多入口生成多个html文件,同时要设置chunks,来引入相应入口文件,如果不设置则会把全部入口文件都引入 。

2、每次打包清除dist原有文件

在plugins使用new CleanWebpackPlugin(),会默认清空 output.path 指定的文件夹内容。

3、抽离css文件

mini-css-extract-plugin使用这个插件的loder来替换style-loader。

在plugins里面配置mini-css-extract-plugin的filename,用于设置存放抽离的css具体目录和名字。

使用webpack的optimization的minimizer加入 terser-webpack-plugin 和 optimize-css-assets-webpack 插件来压缩抽离的css。

4、抽离公共代码

使用webpack的optimization的splitChunks

optimization:{ splitChunks:{ chunks: 'all', // 缓存分组 cacheGroups:{ //第三方模块 vendor:{ name:'vendor', // chunk 名称 priority:1, // 权限最高,优先抽离,重要!! test:/node_modules/, // 匹配目录规则 minSize:0, // 大小限制 minChunks:1, // 最少复用过几次 } //公共模块 common:{ name:'common', // chunk 名称 priority:0, // 优先级 minSize:0, // 公共模块的大小限制 minChunks:2, // 公共模块最少复用过几次 } } } }

5、异步加载js

import语法webpack天生支持异步加载。

异步加载会产生单独的chunk。

6、处理JSX

安装配置 @babel/preset-react 即可。

7、处理VUE文件

安装配置 vue-loader 即可

三、优化构建速度

1、优化 babel-loader(可用于生产)

{test: /\.js$/,use: ['babel-loader?cacheDirectory'], // 开启缓存include: path.resolve(__dirname, 'src'), // 明确范围// 排除范围,include 和 exclude 两者选一个即可// exclude: path.resolve(__dirname, 'node_modules')}

开启缓存后,es6没有改的会使用缓存不会重新编译

设置使用范围可以缩小编译量

2、IgnorePlugin(可用于生产)

忽略正则匹配的 js

3、noParse(可用于生产)

不去解析正则匹配的库的依赖

4、happyPack(可用于生产)

JS单线程,使用happyPack开启多进程打包,提高构建速度,特别是多核CPU。

5、ParallelUglifyPlugin(只用在生产)

webpack内置Uglify工具压缩JS,开启多进程压缩JS,原理和happyPack相同。

new ParallelUglifyPlugin({// 传递给UglifyJS的参数,值不过开启了多进程压缩uglifyJS:{output:{beautify:false, // 最紧凑的输出comments:false, // 删除所有注释},compress:{// 删除所有的 console 语句,可以兼容iedrop_console: true,// 内嵌定义了但是只用到一次的变量collapse_vars: true,// 提取出出现多次但是没有定义成变量去引用的静态值reduce_vars: true,}}}) 

关于开启多进程要按需使用,

项目大,打包速度慢,开启多进程提高速度

项目小,打包速度快,开启多进程反而降低速度

6、自动刷新(不可用于生产)

{watch:true, // 开启监听,默认 false// 注意,开启监听之后,webpack-dev-server 会自动开启刷新浏览器// 监听配置watchOptions:{ignored: /node_modules/, // 忽略内容// 监听到变化发生后等300ms再去执行动作,防止文件更新太快导致重新编译频率太高aggregateTimeout:300, // 默认为300ms// 判断文件是否发生变化时通过不停的去询问系统指定文件有没变化实现的poll:1000, // 默认每隔1000ms询问一次}} 

以上配置一般开发不会配置到,因为开启webpack-dev-server会自动带上自动刷新的配置。以上配置是为了理解自动刷新有哪些内容。

7、热更新(不可用于生产)

自动刷新:整个网页全部刷新,速度较慢,状态会丢失

热更新:新代码生效,网页不刷新,状态不丢失

热更新使用插件:HotModuleReplacementPlugin

在entry入口中要新增两行配置:

entry:{index:['webpack-dev-server/client?http://localhost:8080','webpack/hot/dev-server',path.join(srcPath,'index.js')]}

然后在plugin中使用HotModuleReplacementPlugin插件。

最后在devServer中增加一个属性:hot:true,开启热更新。

配置热更新后,需要增加需要热更新模块的逻辑代码,如下

if(module.hot){moudule.hot.accept(['./math'],()=>{// 热更新模块里面的回调函数})}

  

8、DllPlugin 动态链接库(不可用于生产)

使用前提:

前端框架如vue、react体积大,构建慢,比较稳定,不常升级。

同一个版本只构建一次即可,不用每次都重新构建。

webpack已内置DllPlugin支持。

使用过程:

前端面试题整理——webpack相关考点(前端面试题汇总.pdf)

DllPlugin先打包出dll文件

DllReferencePlugin再使用dll文件

四、优化产出代码

优化方向:体积更小,合理分包,不重复加载,速度更快,内存使用更少

1、小图片Base64编码

2、bundle加hash

3、懒加载

4、提取公共代码

5、IngorePlugin

6、使用CDN加速:

  在output设置publicPath,会修改所有js跟css文件添加cdn前缀

  在url-loader设置publicPath,可以修改图片的cdn前缀

7、使用production

开启production模式跟development相比的差异点:

(1)自动开启代码压缩

(2)Vue React等会自动删掉调试代码(如开发环境的warning)

(3)自动启动Tree-Shaking,必须用ES6 Module 才能让tree-shaking生效,commonjs就不行

  ES6 Module 静态引入,编译时引入

  Commonjs动态引入,执行时引入

  只有静态引入才能进行静态分析,实现Tree-Shaking

8、Scope Hosting

开启之后,会将多个引用文件合并成一个函数,减少函数作用域,代码体积更小,代码可读性更好

如何配置:

引用ModuleConcatenationPlugin插件,使用插件即可开启。

针对npm中第三方模块优先采用 jsnext:main 中指向的 ES6 模块化语法的文件

resolve:{mainFields: ['jsnext:main','brower','main']}

  

五、babel

基本配置:.babelrc文件

plugins是写如何翻译语法的插件,presets是集合多个插件整合的一个包。

{"presets":[["@babel/preset-env"]],"plugins":[]}

babel-polyfill:兼容低版本浏览器,重写低版本没有的新语法。

core-js和regenerator两个库可以满足最大多数新语法的polyfill,babel-polyfill就是前两个库的集合。

babel 7.4之后已经弃用了babel-polyfill,而推荐直接使用core-js和regenerator。

直接使用的弊端是由于重写全局方法会污染全局环境。

babel-runtime:

使用runtime配置,可以使polyfill重写的方法不污染全局环境,相当于重命名方法,代码也是自动替换成新名称的方法。

面试真题:

1、前端代码为什么要进行构建和打包?

代码层面:

  (1)体积更小(Tree-Shaking、压缩、合并),加载更快

  (2)编辑高级语言或语法(TS、ES6+、模块化,scss)

  (3)兼容性和错误检查(Polyfill、postcss、eslint)

研发流程:

  (1)统一、高效的开发环境

  (2)统一的构建流程和产出标准

  (3)集成公司构建规范(提测、上线等)

2、module chunk bundle 分别什么意思,有何区别?

module - 各个源码文件,webpack 中一切皆模块

chunk - 多模块合并成的,如 entry import() splitChunk

bundle - 最终的输出文件

3、loader和plugin的区别?

loader模块转换器,如 less 转 css。说出一些常用的loader

plugin扩展插件,如 HtmlWebpackPlugin。说出一些常用的plugin

4、babel和webpack的区别?

babel是JS新语法编译工具,不关系模块化

webpack是打包构建工具,是多个 loader plugin 的集合

5、如何产出一个 lib

output:{// lib的文件名filename: 'lodash.js',// 输出 lib 到dist 目录下path: distPath,// lib 的全局变量名library: 'lodash'}

  

6、webpack如何实现懒加载?

import()语法实现

结合 Vue React 异步组件,结合 Vue-router React-router 异步加载路由来简要说下。

7、webpack常见性能优化?

将上面的三、四的优化内容根据实际效果讲下

8、babel-runtime和babel-polyfill的区别?

babel-polyfill会污染全局

babel-runtime不会污染全局

产出第三方 lib 要用 babel-runtime

9、为何Proxy 不能被 polyfill?

Class 可以用 function 模拟, Promise 可以用 callback 来模拟

但是Proxy的功能用Object.defineProperty 无法模拟

本文链接地址:https://www.jiuchutong.com/zhishi/310222.html 转载请保留说明!

上一篇:java中TimerTask是什么(java timestamp localdatetime)

下一篇:谈谈程序员 35 岁危机,太真实了……(程序员35岁 知乎)

  • iQOO10怎么关闭拍照声音(iqoo10怎么关闭拍照声音)

    iQOO10怎么关闭拍照声音(iqoo10怎么关闭拍照声音)

  • 优酷vip怎么升级酷喵vip(优酷vip怎么升级快)

    优酷vip怎么升级酷喵vip(优酷vip怎么升级快)

  • 路由器24小时开着费电吗(路由器24小时开机好吗)

    路由器24小时开着费电吗(路由器24小时开机好吗)

  • 抖音怎么查看活跃状态(抖音怎么查看活跃度和权重)

    抖音怎么查看活跃状态(抖音怎么查看活跃度和权重)

  • 荣耀手机忘记锁屏密码了怎么解决(荣耀手机忘记锁屏密码怎么办)

    荣耀手机忘记锁屏密码了怎么解决(荣耀手机忘记锁屏密码怎么办)

  • 文档内容怎么横向打印在页面(怎么把文档内容横向)

    文档内容怎么横向打印在页面(怎么把文档内容横向)

  • 网页切换窗口的快捷键(网页间切换)

    网页切换窗口的快捷键(网页间切换)

  • 没有鼠标怎么删除桌面上的文件(没有鼠标怎么删除excel表格)

    没有鼠标怎么删除桌面上的文件(没有鼠标怎么删除excel表格)

  • 你拨打的电话已关机什么意思(你拨打的电话已停机怎么设置)

    你拨打的电话已关机什么意思(你拨打的电话已停机怎么设置)

  • airpods二代防水吗(airpods二代防水防汗吗)

    airpods二代防水吗(airpods二代防水防汗吗)

  • 一加8pro是什么品牌手机(一加8Pro是什么传感器)

    一加8pro是什么品牌手机(一加8Pro是什么传感器)

  • a/c是什么功能键(思域a/c是什么功能键)

    a/c是什么功能键(思域a/c是什么功能键)

  • 抖音刚发的视频删除有影响吗(抖音刚发的视频删除了重新发有影响吗)

    抖音刚发的视频删除有影响吗(抖音刚发的视频删除了重新发有影响吗)

  • 无法完成更新(为什么电脑无法完成更新)

    无法完成更新(为什么电脑无法完成更新)

  • 三星e980相当于骁龙多少(三星e980相当于什么处理器)

    三星e980相当于骁龙多少(三星e980相当于什么处理器)

  • 苹果7p死机怎么重启(7p手机死机)

    苹果7p死机怎么重启(7p手机死机)

  • 小米8支持全球上网吗(小米支持全球频段的手机)

    小米8支持全球上网吗(小米支持全球频段的手机)

  • 手机恢复出厂照片还在吗(手机恢复出厂照片找回)

    手机恢复出厂照片还在吗(手机恢复出厂照片找回)

  • 腾讯视频有央视直播吗(腾讯视频央视指的图片)

    腾讯视频有央视直播吗(腾讯视频央视指的图片)

  • 打电话前加86什么意思(联系电话前面加86是什么意思?)

    打电话前加86什么意思(联系电话前面加86是什么意思?)

  • 小米npc怎么开(小米npc怎么设置)

    小米npc怎么开(小米npc怎么设置)

  • 问卷星可以重复提交吗(问卷星可以重复导出数据吗)

    问卷星可以重复提交吗(问卷星可以重复导出数据吗)

  • 三星a6060是元气版吗(三星a60元气版和普通版的区别)

    三星a6060是元气版吗(三星a60元气版和普通版的区别)

  • 苹果xs有3dtouch功能吗

    苹果xs有3dtouch功能吗

  • 2019年中级会计师成绩查询时间及入口_查分网址_合格分数线(2019年中级会计考试真题)

    2019年中级会计师成绩查询时间及入口_查分网址_合格分数线(2019年中级会计考试真题)

  • python注释快捷键

    python注释快捷键

  • wifi被恢复出厂设置怎么办(wifi恢复出厂设置后怎么恢复信号)

    wifi被恢复出厂设置怎么办(wifi恢复出厂设置后怎么恢复信号)

  • Linux中使用grep命令搜索文件名及文件内容的方法(linux的grep命令使用)

    Linux中使用grep命令搜索文件名及文件内容的方法(linux的grep命令使用)

  • Spring Cloud Alibaba全家桶(一)——Spring Cloud Alibaba介绍(springcloud阿里巴巴)

    Spring Cloud Alibaba全家桶(一)——Spring Cloud Alibaba介绍(springcloud阿里巴巴)

  • 应交税费借方和贷方各表示什么
  • 非营利组织免税收入
  • 实收资本印花税怎么申报税目
  • 固定资产未付款怎么入账
  • 加计抵减税金分录
  • 进口报关手续费
  • 管理费用现金流量表中属于
  • 房租转租怎么处理合法
  • 不动产权证拆迁的话有什么作用
  • 汇算清缴前未取得发票账务处理
  • 物业公司代收的电费差额收入
  • 未收到发票可以计提成本吗
  • 农产品增值税免税政策
  • 价格调节基金税率和计税依据
  • 物业公司停车费怎么开票
  • 记账凭证中借方和贷方什么意思
  • 经营租赁的固定资产计提折旧吗
  • 预交增值税抵减申报
  • 企业技术中心认定专精特新
  • 汽车发票金额怎么算
  • 电子税务局怎么变更财务负责人
  • 销售固定资产的收入计入什么科目
  • 业绩补偿协议
  • 去银行补充企业信息流程
  • 公益性捐赠支出账务处理
  • 百内国家公园塔状尖峰
  • win10最新版本激活
  • 劳务公司账务处理办法
  • vericut9.0环境变量
  • php自动载入自定义函数文件
  • php截取指定字符串
  • 使用vscode开发vue例子
  • php is_a
  • 工程项目会计怎么样
  • vue实例完整项目源码
  • css实现文字颜色渐变
  • 前端实际开发
  • 产成品和库存商品两个一级科目怎么填
  • 账面价值是历史价值吗
  • 资产减值损失如何确定
  • mongodb aggregate count
  • linux服务器架设指南
  • 帝国cms会员发布信息数量
  • 织梦使用教程
  • 财务费用的相关认定
  • 生产成本设置二级科目
  • 公司收到社保局的提醒函怎么办
  • 个人出租商铺如何报税申报,需要什么资料
  • 什么叫固定资产台账
  • 购买电脑固定资产折旧怎么算
  • 出口退免税的条件
  • 以股权入资该怎么办
  • 外贸公司美金账户开立要求
  • 被挂靠方并收取管理费的公司怎样处理账务?
  • 执行迟延履行利息的计算
  • 可供出售金融资产的会计处理
  • 月末应付职工薪酬为负数怎么办
  • 以前年度销售退回买方账务处理
  • 职工薪酬包括的内容
  • 出口货物退货需要交税吗
  • 培训费怎么算个人所得税
  • 可供出售金融资产公允价值变动
  • 小微企业免税的标准
  • 企业有生产单没发票
  • 奖励罚款怎么做分录
  • xp双系统怎么设置默认系统
  • win8怎么打开系统设置
  • windows找不到硬盘驱动器
  • linux源于
  • win7系统玩游戏怎么样
  • perl字符串长度函数
  • 对象转化为字符串的几种方式
  • nodejs遍历json数据
  • js字符串去掉最后两位
  • jQuery Ajax使用FormData对象上传文件的方法
  • js div拖动
  • android设计模式书籍
  • 电子发票和普通发票哪个好
  • 地税注销流程
  • 购买烟叶要交烟税吗
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设