(vite/webpack 通用)vue 白屏 Uncaught Syntaxerror: Unexpected token ‘?‘

如果可以实现记得点赞分享,谢谢老铁~

一、问题的描述

突然收到业务方发来的反馈: 浏览器一片空白,开控制台输出:Uncaught Syntaxerror: Unexpected token ? 这个是语法错误。
(vite/webpack 通用)vue 白屏 Uncaught Syntaxerror: Unexpected token ‘?‘_第1张图片

二、 如果是用vite来构建:

如果是用vite来构建的,根据vite官方文档描述,build.target默认支持 Chrome >=87、Firefox >=78、Safari >=14、Edge >=88 传送,所以需要我们手动兼容低版本

vite代码版本较高,导致低版本浏览器无法运行,结果是他那边浏览器的版本很低(谷歌44)导致的。

1.首先安装插件:npm i @vitejs/plugin-legacy -D

2.然后配置vite.config.js, 如图

import legacyPlugin from '@vitejs/plugin-legacy';
export default defineConfig({
  plugins: [
    legacyPlugin({
       targets: ["chrome < 60", "edge < 15"], // 需要兼容的目标列表,可以设置多个
      additionalLegacyPolyfills: ["regenerator-runtime/runtime"], // 面向IE11时需要此插件
      renderLegacyChunks: true,
     })
   ]
})

3.当你build构建的时候,可能会报错:

Error: terser not found. Since Vite v3, terser has become an optional dependency. You need to install it.

安装依赖即可:

npm install terser

重新打包、运行到浏览器,则低浏览器不会报错了

三、 如果是用webpack来构建:

需要先下载依赖

npm i @babel/polyfill  @babel/plugin-transform-runtime  @babel/preset-env -D

1.你需要在vue.config.js 里面进行配置:

const { defineConfig } = require('@vue/cli-service')
module.exports = defineConfig({
  transpileDependencies: true,
  configureWebpack:config => {
    config.entry.app = ["@babel/polyfill","./src/main.ts"]              
  },
})

2.然后再babel.config.ts 里面进行配置:

module.exports = {
  presets:[
     ["@vue/app",{
        polyfills:[
           "es6.promise",
           "es6.symbol",
           "es6.array.iterator",
           "es6.object.assign"
        ],
        useBuiltIns:"entry"
     }]
  ]
}

重新打包、运行到浏览器,则低浏览器不会报错了

PS: 亲测谷歌版本 < 50 的,都不支持,以上的均可支持,40+ 版本的请升级版本吧!

你可能感兴趣的:(随手笔记,vue,vue.js,vite)