使用@rollup/plugin-babel 在低版本浏览器中运行ES2020新语法

前言

vite4 + vue3 构建的一个项目,在谷歌75浏览器上跑,然后渺小的我在上面写了ES2020新语法:可选链操作符(?.)、空值合并运算符(??),然后就在谷歌75浏览器上报错了。

预期结果

在代码使用ES2020新语法并且在谷歌75浏览器上运行不报错。

问题展示

xml 复制代码
<template>
  <button @click="fun">
    按钮
  </button>
</template>

<script setup>
const fun = () => {
  let a = {
    name: 'joke',
    age: 30,
  }
  let b = a?.name ?? 'tom';
  console.log(b)
}
</script>

<style scoped>

</style>

了解vite

解决方案

我在网上到了2个兼容方案的插件

不过我在用vite-plugin-babel总是出现一些奇奇怪怪的问题,然后我就又尝试了@rollup/plugin-babel

实践

首先安装 @rollup/plugin-babel 、 预设兼容包 @babel/preset-env、还有core-js

js 复制代码
npm install --save-dev @rollup/plugin-babel @babel/preset-env
npm install core-js@3 --save
js 复制代码
// vite.config.js
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import babel from '@rollup/plugin-babel';
// https://vitejs.dev/config/
export default defineConfig({
  plugins: [vue(),
    {
      ...babel({
        // // 可选: 'bundled', 'runtime', 'inline', 'external'
        babelHelpers: 'bundled',
        // 处理那些文件
        include: [/\.vue$/, /\.ts$/, /\.tsx$/, /\.jsx$/, /\.js$/],
        // 需要处理的文件类型
        extensions: ['.vue', '.ts', '.js', '.tsx', '.jsx'],
        presets: [
          [
            '@babel/preset-env',
            {
              useBuiltIns: 'usage',
              corejs: 3,
              targets: {
                chrome: '75',
              },
              modules: false,
            },
          ],
        ],
      }),
    },
  ],
})
运行结果

打包

然后我就尝试着打包部署到线上看看会不会也有这个问题,结果又报错了

解决打包到线上报错问题

安装 @vitejs/plugin-legacy

js 复制代码
npm install --save-dev @vitejs/plugin-legacy@4
js 复制代码
// vite.config.js
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import babel from '@rollup/plugin-babel';
import legacy from '@vitejs/plugin-legacy';

// https://vitejs.dev/config/
export default defineConfig({
  plugins: [vue(),
  {
    ...babel({
      babelHelpers: 'bundled',
      include: [/\.vue$/, /\.ts$/, /\.tsx$/, /\.jsx$/, /\.js$/],
      extensions: ['.vue', '.ts', '.js', '.tsx', '.jsx'],
      presets: [
        [
          '@babel/preset-env',
          {
            useBuiltIns: 'usage',
            corejs: 3,
            targets: {
              chrome: '75',
            },
            modules: false,
          },
        ],
      ],
    }),
  },
  legacy({
    targets: ['defaults', 'not IE 11', 'chrome >= 75'],
  }),
  ],
})
打包运行结果
相关推荐
子兮曰3 天前
jev-ultrafast 深度解析:7 秒订机票的浏览器 Agent 是如何炼成的
前端·后端·agent
子兮曰3 天前
Jev 爆发一周:7 秒 Agent 背后的 System One 生态与三场争议
前端·后端·ai编程
前端小万3 天前
写公众号赚了 3000 块后,我做了一款叫 "一键成稿" 的软件
前端·微信小程序
爱勇宝3 天前
ZCode 开源 24 小时:一份没有历史的账本,回答不了"有没有偷代码"
前端·后端·chatglm (智谱)
三十而立洋3 天前
Cookie 详解:从产生到安全,一次讲透
前端·javascript
卡布鲁3 天前
把一个 Vite + Vue3 应用塞进 qiankun (React + Umi3) 主站:十个坑的复盘
前端·javascript·react.js
汉堡大王95273 天前
Jev:不是聊天机器人, 而是一个智能 if 语句
前端·人工智能·后端
梦想很大很大3 天前
从运行事实到回归证据:Workrun 的 Telemetry 与 Evaluation 实践
前端·人工智能·后端
计算机魔术师3 天前
Meta Muse agent 接入 Shopify 的 Shop Pay 实现代理式购物
前端
沙蒿同学3 天前
我用 Go 搭了一条 AI Agent 流水线:从 1 张商品图到一整套淘宝详情页
前端·javascript·后端