重要提示:請首先完整閱讀完文章內容后再操作,以免不必要的時間浪費!切記!!!在使用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']。需要額外說明的是,對于vite5.2.8或之后的版本不需要再單獨安裝使用包括 @vitejs/plugin-legacy以及其他任何babel插件解決瀏覽器兼容問題,前文提到vite已經內置了相關配置項(build.target),如果你強行在plugins中使用 legacy(),那么在執行 npm run build 打包時也會有相關配置已被替換的提示。最坑的點是,不要在開發階段(npm run dev)到低版本瀏覽器上驗證build.target配置是否生效,必須用npm run build 打包生成的代碼來驗證,因為這個配置在開發環境是不起作用的,我被整整浪費了3個小時才發現的這個問題,當然可能有我不知道的配置項來控制這個行為。
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',],},
})