Eswlnk Blog Eswlnk Blog
  • 资源
    • 精彩视频
    • 破解专区
      • WHMCS
      • WordPress主题
      • WordPress插件
    • 其他分享
    • 极惠VPS
    • PDF资源
  • 关于我
    • 论文阅读
    • 关于本站
    • 通知
    • 左邻右舍
    • 玩物志趣
    • 日志
    • 专题
  • 热议话题
    • 游戏资讯
  • 红黑
    • 渗透分析
    • 攻防对抗
    • 代码发布
  • 自主研发
    • 知识库
    • 插件
      • ToolBox
      • HotSpot AI 热点创作
    • 区块
    • 快乐屋
    • 卡密
  • 乱步
    • 文章榜单
    • 热门标签
  • 问答中心反馈
  • 注册
  • 登录
首页 › 代码发布 › 摆脱Vite + Vue 3白屏困扰的终极指南 | 深入探索,轻松应对

摆脱Vite + Vue 3白屏困扰的终极指南 | 深入探索,轻松应对

Eswlnk的头像
Eswlnk
2023-12-08 22:10:36
摆脱Vite + Vue 3白屏困扰的终极指南 | 深入探索,轻松应对-Eswlnk Blog
智能摘要 AI
在Vue 3项目中使用Vite打包时,因默认目标版本较高,可能导致低版本浏览器出现白屏现象。为此,需调整打包目标版本至ES2015,并利用`@vitejs/plugin-legacy`插件实现对不支持ES模块的浏览器兼容。通过在`vite.config.ts`中设置`build.target: "es2015"`,并引入`legacy()`插件,Vite会在打包时生成`nomodule`脚本,供不支持ES模块的浏览器使用。此外,可通过`.browserslistrc`文件指定兼容的浏览器范围,以优化资源分配。这种方式既保留了现代浏览器的性能优势,又确保了旧浏览器的可用性,避免了一刀切的兼容策略。

前言

在项目中全面采用 Vue 3 时,自然而然地选择了与之配套的 Vite 打包工具。在这个过程中,我们开始使用许多新的语法,比如近几年变得流行的可选链语法。虽然这个语法已经被纳入声呐的代码规范中,但是 Vite 在打包时并不会进行过多的兼容处理。

默认情况下,Vite 的兼容目标是支持原生 ES 模块、原生 ES 模块动态导入以及 import.meta 的浏览器。官方预设的兼容目标包括:

  • ES2020
  • Edge 88
  • Firefox 78
  • Chrome 87
  • Safari 14

而我们使用的可选链语法正是 ES2020 版本引入的。因此,Vite 在打包后并不会执行任何兼容处理,这导致一些浏览器版本较低的设备打开网站时会出现白屏的情况。

显然,对于大多数目标用户来说,采用这么新的语法可能有些过于超前。因此,有必要进行一些适当的兼容处理。

教程

只兼容到ES2015(ES6)

由于vue3的特性,最低也只能兼容只是es2015的浏览器,因为再低点没有proxy了,vite官方也提供了方便的配置项:

// vite.config.ts
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'

// https://vitejs.dev/config/
export default defineConfig({
  plugins: [vue()],
  build: {
    target: "es2015"
  }
})

通过指定打包后的目标版本就行了,vite会将新的语法通过esbuild进行转换,此时我们在支持esm的浏览器上访问时正常的。(注意只有打包后的代码才会有效)

这里我特意大写了 支持ESM的浏览器是有用意的,我们看下打包后的index.html文件。

摆脱Vite + Vue 3白屏困扰的终极指南 | 深入探索,轻松应对-Eswlnk Blog

可以看到script标签上使用了type="module"属性,显然即便我们的脚本里面已经兼容到了es2015,但是如果浏览器稍微低一点的版本的,它是支持es2015但是它不支持ESM模块啊。

我们看一下对应的支持统计:

es2015

es6版本最经典的就是proxy的支持

摆脱Vite + Vue 3白屏困扰的终极指南 | 深入探索,轻松应对-Eswlnk Blog

ESM模块

摆脱Vite + Vue 3白屏困扰的终极指南 | 深入探索,轻松应对-Eswlnk Blog

可以看到和es2015的支持度还是有一些差别的。

那么就进入到第二个问题,如何兼容不支持esm的浏览器!

兼容ESM浏览器

官方提供了一个插件:legacy

官方对它的定义是:为打包后的文件提供传统浏览器兼容性支持

其实就是对不支持esm的浏览器的支持,同时还有语法降级处理。

先进行安装:

pnpm i @vitejs/plugin-legacy@4.1.1 terser -D

需要注意的是vite4的legacy插件最高目前是4.1.1,再高的版本只支持vite5了,使用起来会报错。

legacy插件需要依赖terser对代码进行压缩。

使用起来也很简单,我们直接引入插件并启用即可:

// vite.config.ts
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import legacy from "@vitejs/plugin-legacy";

// https://vitejs.dev/config/
export default defineConfig({
  plugins: [
    vue(),
    legacy()
  ],
  build: {
    target: "es2015"
  }
})

官方定义,在没有明确指定插件配置参数targets时,他会去读取项目中的.browserslistrc文件,我们知道这个文件是一个用于配置支持的浏览器范围的文件,通常会被Babel、Autoprefixer等插件使用。

我个人根据es2015的支持版本书写了一下内容:

Chrome >= 51
Edge >= 15
Safari >= 10
Firefox >= 54
Opera >= 38
iOS >= 10
not ie <= 11
Android >= 5
not IE <= 11

然后我们再去打包项目,可以发现index.html的脚本引入发生了变化。

摆脱Vite + Vue 3白屏困扰的终极指南 | 深入探索,轻松应对-Eswlnk Blog

可以看到script发生了变化,除了type="module"还有一个nomodule脚本,nomodule这个属性表示在支持esm的浏览器不运行里面的代码,而不支持esm的浏览器又无法识别type="module",反而会去运行nomodule的script,从而实现了降级区分。

而降级的脚本都会携带一个legacy文本

摆脱Vite + Vue 3白屏困扰的终极指南 | 深入探索,轻松应对-Eswlnk Blog

这个就是用于兼容不支持esm模块的浏览器降级方案。

这个方式的好处在较新的浏览器中可以使用新的特性,旧的浏览器使用legacy降级脚本,从而避免了以前打包时一刀切的兼容方式,所有的代码全部降级处理,使得一些新设备没法体现出新语法的性能。

本站默认网盘访问密码:1166
本站默认网盘访问密码:1166
声明:本站原创文章文字版权归本站所有,转载务必注明作者和出处;本站转载文章仅仅代表原作者观点,不代表本站立场,图文版权归原作者所有。如有侵权,请联系我们删除。
vitevue兼容性浏览器
2
0
Eswlnk的头像
Eswlnk
一个有点倒霉的研究牲站长
赞赏
「代码分享」探索与挑战 | 简单搞定 Web 版谷歌登录
上一篇
「技术教程」CSS技巧打造SPA首屏骨架屏 | 实现快速加载和用户友好的首屏骨架结构
下一篇

评论 (0)

请登录以参与评论
现在登录
    发表评论

猜你喜欢

  • 「日志记录」逆向必应翻译网页版API实现免费调用
  • 「代码分享」第三方平台VIP视频解析API接口
  • 「至臻原创」某系统网站登录功能监测
  • 「开发日志」在Vue3中如何为路由Query参数标注类型
  • 「其他分享」分享一个在Tun模式下可用的脚本
Eswlnk的头像

Eswlnk

一个有点倒霉的研究牲站长
1108
文章
319
评论
679
获赞

随便看看

「Linux操作系统实验」模块编程
2023-01-01 14:41:40
关于Flutter Web刷新与后退问题的解决方法
2022-06-14 12:07:04
「主题通用」全站文章评论增加验证码
2023-07-15 3:33:08

文章目录

专题展示

WordPress53

工程实践37

热门标签

360 AI API CDN java linux Nginx PDF PHP python SEO Windows WordPress 云服务器 云服务器知识 代码 免费 安全 安卓 工具 开发日志 微信 微软 手机 插件 攻防 攻防对抗 教程 日志 渗透分析 源码 漏洞 电脑 破解 系统 编程 网站优化 网络 网络安全 脚本 苹果 谷歌 软件 运维 逆向
  • 首页
  • 知识库
  • 地图
Copyright © 2023-2025 Eswlnk Blog. Designed by XiaoWu.
本站CDN由 壹盾安全 提供高防CDN安全防护服务
蜀ICP备20002650号-10
页面生成用时 0.596 秒   |  SQL查询 29 次
本站勉强运行:
友情链接: Eswlnk Blog 网站渗透 倦意博客 特资啦!个人资源分享站 祭夜博客 iBAAO壹宝头条
  • WordPress142
  • 网络安全64
  • 漏洞52
  • 软件52
  • 安全48
现在登录
  • 资源
    • 精彩视频
    • 破解专区
      • WHMCS
      • WordPress主题
      • WordPress插件
    • 其他分享
    • 极惠VPS
    • PDF资源
  • 关于我
    • 论文阅读
    • 关于本站
    • 通知
    • 左邻右舍
    • 玩物志趣
    • 日志
    • 专题
  • 热议话题
    • 游戏资讯
  • 红黑
    • 渗透分析
    • 攻防对抗
    • 代码发布
  • 自主研发
    • 知识库
    • 插件
      • ToolBox
      • HotSpot AI 热点创作
    • 区块
    • 快乐屋
    • 卡密
  • 乱步
    • 文章榜单
    • 热门标签
  • 问答中心反馈