大厂面试题分享 面试题库

前后端面试题库 (面试必备) 推荐:★★★★★

地址:前端面试题库  web前端面试题库 VS java后端面试题库大全

1.什么是vite

vite是新一代前端构建工具,能够显著提升前端开发体验。他是使用rollup打包你的代码,是开箱即用的,同时也提供了丰富的插件api,带来了高度的可扩展性。可以构建vue,react 等项目

2.vite与webpack相比有什么优点(为什么选vite)

vite服务启动更快

webpack打包时必须优先抓取并构建你的整个应用,然后才能提供服务。所以对于大型项目当我们执行npm run serve时通常需要几分钟,即使是热更新甚至也需要几秒。

Vite 通过在一开始将应用中的模块区分为 依赖 和 源码 两类,改进了开发服务器启动时间。依赖使用esbuild进行依赖预构建,源码就是我们代码中写的业务组件.vue,.ts文件等,是esmodule的形式,一方面浏览器可以直接解析esmodule,另一方面,我们可以通过动态导入,路由懒加载的方式,只有当路由跳转到对应页面才去加载该页面的资源。

vite服务热更新更快

在 Vite 中,HMR 是在原生 ESM 上执行的。当编辑一个文件时,Vite 只需要精确地使已编辑的模块与其最近的 HMR 边界之间的链失活[1](大多数时候只是模块本身),使得无论应用大小如何,HMR 始终能保持快速更新。

Vite 同时利用 HTTP 头来加速整个页面的重新加载(再次让浏览器为我们做更多事情):源码模块的请求会根据 304 Not Modified 进行协商缓存,而依赖模块请求则会通过 Cache-Control: max-age=31536000,immutable 进行强缓存,因此一旦被缓存它们将不需要再次请求。

3.vite有什么功能

npm依赖解析和构建

TypeScript

Vite 天然支持引入 .ts 文件。 请注意,Vite 仅执行 .ts 文件的转译工作,并不执行 任何类型检查。并假定类型检查已经被你的 IDE 或构建过程处理了。那怎么开启类型检查呢?

客户端类型 Vite 默认的类型定义是写给它的 Node.js API 的。要将其补充到一个 Vite 应用的客户端代码环境中,请添加一个 d.ts 声明文件:

tsconfig.json中需要加入一下

或者官网提示可以这样做

css

由于 Vite 的目标仅为现代浏览器,因此建议使用原生 CSS 变量和实现 CSSWG 草案的 PostCSS 插件(例如 postcss-nesting)来编写简单的、符合未来标准的 CSS。 话虽如此,但 Vite 也同时提供了对 .scss.sass.less.styl 和 .stylus 文件的内置支持。没有必要为它们安装特定的 Vite 插件,但必须安装相应的预处理器依赖:

另外,vite.config.ts中需要增加如下配置:

    css: {// css预处理器preprocessorOptions: {scss: {additionalData: '@import "@/assets/style/mixin.scss";@import "@/assets/style/variable.scss";' //引入全局scss样式}}}

你还可以通过在文件扩展名前加上 .module 来结合使用 CSS modules 和预处理器,例如 style.module.scss。(react项目中这样用过)

静态资源处理

import imgUrl from './img.png'
document.getElementById('hero-img').src = imgUrl

例如,imgUrl 在开发时会是 /img.png,在生产构建后会是 /assets/img.2d8efhg.png

是一个 ESM 的原生功能,会暴露当前模块的 URL。将它与原生的 URL 构造器 组合使用,在一个 JavaScript 模块中,通过相对路径我们就能得到一个被完整解析的静态资源 URL:

const imgUrl = new URL('./img.png', import.meta.url).href
document.getElementById('hero-img').src = imgUrl

这个模式同样还可以通过字符串模板支持动态 URL:

function getImageUrl(name) { return new URL(`./dir/${name}.png`, import.meta.url).href }

示例:

<body><img id="imgbox"></img><script type="module">// 在原生方式直接这样引用不行呢,需要使用new URL 结合import.meta.url的方式// import imgUrl from './straw.jpg'// import.meta是一个给 JavaScript 模块暴露特定上下文的元数据属性的对象。它包含了这个模块的信息,比如说这个模块的 URL。// 注意:1.js的type类型需是module 2.返回的地址是绝对路径console.log('import.meta',import.meta)//new URL() 创建并返回一个URL对象,该 URL 对象引用使用绝对 URL 字符串,相对 URL 字符串和基本 URL 字符串指定的 URL。// 如果url参数是相对 URL,则构造函数将使用url参数和可选的base参数作为基础。const url = new URL('./straw.jpg',import.meta.url).hrefdocument.getElementById('imgbox').src = url// document.getElementById('imgbox').src = imgUrl</script>
</body>

4.vite中的环境变量

5.vite项目中的一些实践

1.vite-plugin-checker可以配置检查ts,项目中发现并没有检查.vue文件

第一种方式:dev": "vue-tsc --noEmit && vite",

第二种方式: (推荐,因为npm run dev ,vite线程不做类型检查,只做ts语法转译,相当于开启第二个线程做类型检查)

 checker({// eslint: {//   // for example, lint .ts and .tsx//   lintCommand: 'eslint "./src/\*\*/\*.{js,jsx,ts,tsx}"',// },typescript: true,vueTsc: true})

2.npm run build (如果有ts问题,阻止打包成功,不生成dist文件)

"build": "vue-tsc --noEmit && vite build",

3.build打包优化

- 压缩 vite-plugin-compression(需要通知后端和运维,前端已经压缩了,后端设置content-type:gzip,客户端收到后需要解压缩,也是需要时间的,所以不建议过多处理?)

- 分包 这个构建工具好像自动做了(把一些不常动的包分割出来,比如loadsh,利用浏览器的缓存策略只更新变动的文件)

- 动态加载,比如动态路由

- cdn加速 vite-plugin-cdn-import

4.preview 预览生产包

5.unplugin-auto-import 和unplugin-vue-components

unplugin-auto-import  自动导入vue中的api, 避免全量引入的尴尬以及每个文件都要手动导入 API 的低效重复搬砖。

unplugin-vue-components 自动导入vue组件,比如element ui ,ant-design-vue

实际项目中使用 unplugin-vue-components会报错

Components({resolvers: [AntDesignVueResolver({// importStyle: 'less', // 一定要开启这个配置项}),],directoryAsNamespace: true}),解决directoryAsNamespace: true。加这个属性后实际项目也会有警告

 大厂面试题分享 面试题库

前后端面试题库 (面试必备) 推荐:★★★★★

地址:前端面试题库  web前端面试题库 VS java后端面试题库大全

【面试题】谈谈你对vite的了解相关推荐

  1. 从一道面试题谈谈一线大厂码农应该具备的基本能力

    作者:Yura Shevchenko 来源:skypixel.com 关于一线码农的面试,我想说 求职面试在绝大部分人来说都是必不可少的,自己作为求职者也参与了不少面试(无论成功或者失败),作为技术面 ...

  2. 2017年搜狐内推 面试题——谈谈面试中的算法

    转自:2017年搜狐内推 面试题--谈谈面试中的算法,保存在此以学习. 第一题:给你一个数组,其中有一个元素的个数大于数组总个数的一半,求出这个元素. 该同学的给出了方法一:先对数组排序,然后找到中间 ...

  3. 集合面试题(谈谈你对集合的理解?)

    目录 1.Collection 与Collections的区别 2.Collection下的接口: 1. List 元素有序,可重复. 实现类的区别如下: 1.ArrayList 2.LinkedLi ...

  4. 每天一道面试题-谈谈对面向对象思想的理解

    这个问题,通常会让很多人有点不知所措,感觉我一直在编码,但是说到思想很难去阐述. 下面,我说说自己的想法, 首先,谈谈"面向过程"vs"面向对象" 我觉得这两者 ...

  5. 从 Google 的一道面试题谈谈数学基础的重要性

    编程能力是剑法,而数学基础是内功.只会剑法而不会内功,在实战中一定会鼻青脸肿. 2004 年,在硅谷的交通动脉 101 公路上出现了一块巨大的广告牌,上面是道数学题:{ e 的连续数字中最先出现的 1 ...

  6. 闭包 python_根据面试题谈谈 Python 闭包

    题目: 1.什么是闭包?闭包的定义? 2.手写一个简单的闭包 3.变量作用域规则与 nonlocal 关键字? 4.闭包的应用 答案要点: 1.首先,我们要了解变量作用域,上代码:# 示例一 def ...

  7. 面试题-谈谈你对JVM的理解

    首先问一个问题,jvm.jdk.jre三者的区别?再去谈其他的 JVM(Java  Virtual  Machine):虚拟机  ,源文件.java在虚拟机中通过编译器编译成字节码文件.class,是 ...

  8. 面试题——谈谈指针和引用的区别

    一.指针和引用的定义和性质区别: (1) 指针:指针是一个变量,只不过这个变量存储的是一个地址,指向内存的一个存储单元,即指针是一个实体:而引用跟原来的变量实质上是同一个东西,只不过是原变量的一个别名 ...

  9. 面试题谈谈你对spring的理解

    1.spring为什么出现. spring的出现是为了解耦,我们在学习java初期,相信很多小伙伴都使用的是JSP+Servlet+MySQL+JDBC技术,在操作dao层的时候,每次都需要实例化一次 ...

最新文章

  1. Laravel 事件侦听的几个方法 [Trait, Model boot(), Observer Class]
  2. bvp解算器是什么_边值问题(BVP)的Matlab解法
  3. Mysql数据库多实例配置
  4. UVA - 512 ​​​​​​​Spreadsheet Tracking
  5. 利用 cwRsync 实现代码(文件)同步的解决办法
  6. Numpy中出现“ValueError: zero-size array to reduction operation maximum which has no identity”错误的调试笔记
  7. oracle11g更改字符集AL32UTF8为ZHS16GBK及创建用户、删除用户
  8. mysql输入密码就闪退_MySQL在我的服务列表里凭空消失~
  9. python中__future__包
  10. mac插网线不能上网_我的Macbook插上网线为什么不能上网? – 手机爱问
  11. DirectX11 With Windows SDK--28 计算着色器:波浪(水波)
  12. python duplicated函数_16、pandas的duplicated和drop_duplicaates函数
  13. 微信发红包测试用例设计
  14. 怎么查计算机上c盘的历史记录,如何查看电脑历史操作记录
  15. 国外人经常上的网站,即全球各个领域最大的互联网网站
  16. 硕士研究生入学统一考试408 计算机学科考试大纲
  17. 【meng_项目】python+flask+html+css制作一个简单的生日祝福语网页
  18. 华为鸿蒙的追逼,慌了的谷歌让新系统兼容安卓应用以加速推广
  19. 小程序服务器搭建前后端交互,手把手带你搭一个简单的微信小程序(包括前后端)...
  20. 30W/130W/200W/500W的图片是分辨率

热门文章

  1. 树莓派 2.8寸 ili9341 tft lcd spi 屏幕显示
  2. Flutter零基础入门配套代码二
  3. jexus docker
  4. FFmpeg API 之 AVSampleFormat
  5. 学习软件测试前景如何?好就业吗?
  6. win11取消右键菜单折叠
  7. java编程实现给微信发送消息
  8. 宝宝补钙,妈妈需留意
  9. 2 OpenWrt路由器系统开发与网页设计
  10. 线上招募100名学习短视频运营,网红速成、直播带货!