vite+vue3开发uni-app时低版本浏览器不支持es6语法的问题排坑笔记

复制代码
重要提示:请首先完整阅读完文章内容后再操作,以免不必要的时间浪费!切记!!!

在使用vite+vue3开发uni-app项目时,存在低版本浏览器不兼容es6语法的问题,如“?.” “??” 等。为了方便使用jenkins自动化部署前端项目,我使用的是 uni-cli而非HBuilderX 创建的项目,当然使用uni-cli创建uni-app项目还有一个好处是可以使用其他软件如 vscode、Cursor 或者webstrom进行开发,这些软件可以集成AI功能,能方便我们使用AI辅助开发,提升开发效率。

在我的项目中使用的vite版本是5.2.8,如果需要前端项目支持低版本的浏览器,或者需要将较新的es语法转换成更低版本,那么只需要在 vite.config.js 中添加 build.target 配置即可,vite官方文档显示build.target的值为string或者string[],可以根据自己的兼容需求进行配置。如果未显式配置build.target,那么vite会使用默认值“modules”,根据文档说明,其作用等同于 ['es2020', 'edge88', 'firefox78', 'chrome87', 'safari14']。

需要额外说明的是,对于vite v2或之后的版本不需要再单独安装使用包括 @vitejs/plugin-legacy以及其他任何babel插件解决浏览器兼容问题,前文提到vite已经内置了相关配置项(build.target),如果你使用了较新的vite版本,若强行在plugins中使用 legacy(),那么在执行 npm run build 打包时也会有相关配置已被替换的提示。

最坑的点是,不要在开发阶段(npm run dev)到低版本浏览器上验证build.target配置是否生效,必须用npm run build 打包生成的代码来验证,因为这个配置在开发环境是不起作用的,我被整整浪费了3个小时才发现的这个问题,当然可能有我不知道的配置项来控制这个行为。
javascript 复制代码
import { defineConfig } from 'vite'
import uni from '@dcloudio/vite-plugin-uni'
// import legacy from '@vitejs/plugin-legacy'

// https://vitejs.dev/config/
export default defineConfig({
    plugins: [
        uni(),
        // legacy({
        //     targets: [
        //         "> 1%, last 1 version, ie >= 11",
        //         "safari >= 10",
        //         "Android > 39",
        //         "Chrome >= 60",
        //         "Safari >= 10.1",
        //         "iOS >= 10.3",
        //         "Firefox >= 54",
        //         "Edge >= 15"
        //     ],
        // })
    ],
    build: {
        sourcemap: true,
        target: [
            'chrome58',
            'firefox67',
            'safari11',
            'edge79',
        ],
    },
})
相关推荐
RuoyiOffice2 分钟前
企业请假销假系统设计实战:一张表、一套流程、两段生命周期——BPM节点驱动的表单变形术
java·spring·uni-app·vue·产品运营·ruoyi·anti-design-vue
喝拿铁写前端9 分钟前
一套面向 Web、H5、小程序与 Flutter 的多端一致性技术方案
前端·架构
yaaakaaang15 分钟前
(一)前端,如此简单!---下载Nginx
前端·nginx
牛奶20 分钟前
为什么全国人民都能秒开同一个视频?
前端·http·cdn
KongHen021 小时前
uniapp-x实现自定义tabbar
前端·javascript·uni-app·unix
汪子熙1 小时前
TS2320 错误的本质、触发场景与在 Angular / RxJS 项目中的系统化应对
前端·javascript·angular.js
我命由我123451 小时前
React - BrowserRouter 与 HashRouter、push 模式与 replace 模式、编程式导航、withRouter
开发语言·前端·javascript·react.js·前端框架·html·ecmascript
Younglina1 小时前
用AI全自动生成连环画?我试了,效果惊艳!
前端·ai编程·claude
Devin_chen1 小时前
ES6 Class 渐进式详解
前端·javascript
小番茄夫斯基1 小时前
前端开发的过程中,需要mock 数据,但是走的原来的接口,要怎么做
前端·javascript