码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • vite如何兼容低版本浏览器


    一、问题

    在使用vue3.2和vite2.0+开发一个移动端H5,测试时发现很多低版本的安卓手机浏览器出现白屏的现象,而ios机型基本上是好的,原因是很多低版本浏览器并不支持原生ESM导入的方式,下面给出解决方案:

    二、兼容原生ESM的浏览器

    默认情况下,Vite 的目标浏览器是指能够 支持原生 ESM script 标签 和 支持原生 ESM 动态导入 的。作为参考,Vite 使用这个 browserslist 作为查询标准:

    • Chrome >=87
    • Firefox >=78
    • Safari >=13
    • Edge >=88

    三、解决方案 

    步骤一:  vite.config.ts里 build.target 配置项 指定构建目标为 es2015

    步骤二: 通过插件 @vitejs/plugin-legacy 来自动生成传统浏览器的 chunk 及与其相对应 ES 语言特性方面的 polyfill。兼容版的 chunk 只会在不支持原生 ESM 的浏览器中进行按需加载。

    1、安装@vitejs/plugin-legacy

    yarn add @vitejs/plugin-legacy -D

    2、配置 vite.config.ts

    1. // vite.config.ts
    2. import { defineConfig } from 'vite'
    3. import vue from '@vitejs/plugin-vue'
    4. import legacy from '@vitejs/plugin-legacy'
    5. // https://vitejs.dev/config/
    6. export default defineConfig({
    7. plugins: [
    8. vue(),
    9. legacy({
    10. targets: ['chrome 52'],
    11. additionalLegacyPolyfills: ['regenerator-runtime/runtime'],
    12. renderLegacyChunks: true,
    13. polyfills: [
    14. 'es.symbol',
    15. 'es.array.filter',
    16. 'es.promise',
    17. 'es.promise.finally',
    18. 'es/map',
    19. 'es/set',
    20. 'es.array.for-each',
    21. 'es.object.define-properties',
    22. 'es.object.define-property',
    23. 'es.object.get-own-property-descriptor',
    24. 'es.object.get-own-property-descriptors',
    25. 'es.object.keys',
    26. 'es.object.to-string',
    27. 'web.dom-collections.for-each',
    28. 'esnext.global-this',
    29. 'esnext.string.match-all'
    30. ]
    31. }
    32. ],
    33. build: {
    34. target: 'es2015'
    35. }
    36. })

     四、打包检验

    查看打包出来的dist里的index.html可知,script的引入方式有两种,检测当前浏览器支持原生ESM时,加载<script type="module">,而对于低版本的浏览器会加载<script nomodule>相应的js。

     (完)

    参考文献:
    构建生产版本 | Vite 官方中文文档;

    记一次vite2.x打包优化过程 - SegmentFault 思否

    https://github.com/vitejs/vite/tree/main/packages/plugin-legacy

  • 相关阅读:
    Windows10环境下Python解析pacp文件
    中间件 | RPC - [Dubbo]
    jQuery_按键变色/keyCode/text
    stable diffusion webui中的sampler
    哪款蓝牙耳机平价好用?值得学生党入手的蓝牙耳机推荐
    web前端期末大作业:基于HTML+CSS+JavaScript实现网上鲜花店网站设计(14页)
    华为OD机试真题B卷 Java 实现【食堂供餐】,附详细解题思路
    鸿蒙系统和MIUI之类的系统有何区别?
    Python Watchdog:高效的文件系统监控
    什么是Python虚拟环境?
  • 原文地址:https://blog.csdn.net/Mr_JavaScript/article/details/125388234
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号