使用vite發(fā)布app存在的所有問(wèn)題解決方法
1.打包項(xiàng)目的時(shí)候,dist里的css和js等文件都在assets,沒(méi)分css和js文件,需要在vite.config.ts配置。
build: {
rollupOptions: {
output: {
// 最小化拆分包
manualChunks: (id) => {
if (id.includes('node_modules')) {
return id.toString().split('node_modules/')[1].split('/')[0].toString()
}
},
// 用于從入口點(diǎn)創(chuàng)建的塊的打包輸出格式[name]表示文件名,[hash]表示該文件內(nèi)容hash值
entryFileNames: 'js/[name].[hash].js',
// 用于命名代碼拆分時(shí)創(chuàng)建的共享塊的輸出命名
chunkFileNames: 'js/[name].[hash].js',
// 用于輸出靜態(tài)資源的命名,[ext]表示文件擴(kuò)展名
assetFileNames: '[ext]/[name].[hash].[ext]'
// 拆分js到模塊文件夾
// chunkFileNames: (chunkInfo) => {
// const facadeModuleId = chunkInfo.facadeModuleId ? chunkInfo.facadeModuleId.split('/') : [];
// const fileName = facadeModuleId[facadeModuleId.length - 2] || '[name]';
// return `js/${fileName}/[name].[hash].js`;
// },
}
}
}這樣就已經(jīng)完成了拆分css和js等文件

2.這邊還需要加一下vite的版本問(wèn)題,不然后續(xù)打包的app,在android或者iOS下載打開(kāi)可能是白屏的
一、問(wèn)題
在使用vue3.2和vite2.0+開(kāi)發(fā)一個(gè)移動(dòng)端H5,測(cè)試時(shí)發(fā)現(xiàn)很多低版本的安卓手機(jī)瀏覽器出現(xiàn)白屏的現(xiàn)象,而ios機(jī)型基本上是好的,原因是很多低版本瀏覽器并不支持原生ESM導(dǎo)入的方式,下面給出解決方案:
二、兼容原生ESM的瀏覽器
默認(rèn)情況下,Vite 的目標(biāo)瀏覽器是指能夠 支持原生 ESM script 標(biāo)簽 和 支持原生 ESM 動(dòng)態(tài)導(dǎo)入 的。作為參考,Vite 使用這個(gè) browserslist 作為查詢(xún)標(biāo)準(zhǔn):
Chrome >=87
Firefox >=78
Safari >=13
Edge >=88
三、解決方案
步驟一: vite.config.ts里 build.target 配置項(xiàng) 指定構(gòu)建目標(biāo)為 es2015 步驟二: 通過(guò)插件 @vitejs/plugin-legacy 來(lái)自動(dòng)生成傳統(tǒng)瀏覽器的 chunk 及與其相對(duì)應(yīng) ES 語(yǔ)言特性方面的 polyfill。兼容版的 chunk 只會(huì)在不支持原生 ESM 的瀏覽器中進(jìn)行按需加載。
1、安裝@vitejs/plugin-legacy
npm i @vitejs/plugin-legacy
2.配置 vite.config.ts
import legacy from "@vitejs/plugin-legacy";
export default defineConfig({
plugins = [
vue(),
legacy({
targets: [
"> 1%, last 1 version, ie >= 11",
"safari >= 10",
"Android > 39",
"Chrome >= 60",
"Safari >= 10.1",
"iOS >= 10.3",
"Firefox >= 54",
"Edge >= 15"
],
additionalLegacyPolyfills: ["regenerator-runtime/runtime"],
polyfills: ["es.promise.finally", "es/map", "es/set"],
modernPolyfills: ["es.promise.finally"]
})
];
build: {
target: 'es2015'
}
});3.Vite打包后的dist不能直接在瀏覽器打開(kāi)
原因
Vite 本身依賴(lài)于原生ES模塊來(lái)做模塊加載,而原生ES模塊是不支持 file:// 本地訪(fǎng)問(wèn)的。
解決辦法
方案一:使用http-server插件啟動(dòng)
1.安裝node.js;(已安裝跳過(guò))
2.安裝http-server。
npm install http-server -g
或
yarn global add http-server
3、進(jìn)入dist根目錄執(zhí)行啟動(dòng)項(xiàng)目
http-server
這樣就可以在dist文件里運(yùn)行了。
4.在HBuilderX發(fā)布app
1.打開(kāi)HBuilderX新建一個(gè)5+APP項(xiàng)目,并把vue中dist里面的所有文件復(fù)制過(guò)來(lái)(只保留manifest.json文件,其他換成dist文件)


2.在manifest.json選擇對(duì)應(yīng)的信息,

3.點(diǎn)擊模板配置需關(guān)掉這2個(gè)選項(xiàng)

4.然后點(diǎn)擊發(fā)行云打包,選擇以下幾個(gè)選項(xiàng)


5.打包成功發(fā)送這個(gè)文件到QQ,手機(jī)下載即可



總結(jié)
到此這篇關(guān)于使用vite發(fā)布app存在的所有問(wèn)題解決方法的文章就介紹到這了,更多相關(guān)vite發(fā)布app問(wèn)題內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
vue實(shí)現(xiàn)旋轉(zhuǎn)木馬動(dòng)畫(huà)
這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)旋轉(zhuǎn)木馬動(dòng)畫(huà),圖片數(shù)量無(wú)限制,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-07-07
vue動(dòng)態(tài)顯示圖片報(bào)錯(cuò)404的解決
這篇文章主要介紹了vue動(dòng)態(tài)顯示圖片報(bào)錯(cuò)404的解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-07-07
Vue中?引入使用?babel-polyfill?兼容低版本瀏覽器的方法
最近在項(xiàng)目中使用 webpack 打包后升級(jí),用戶(hù)反饋使用瀏覽器(chrome 45)訪(fǎng)問(wèn)白屏。經(jīng)過(guò)排查發(fā)現(xiàn):由于 chrome 45 無(wú)法兼容 ES6 語(yǔ)法導(dǎo)致的,接下來(lái)給大家介紹下Vue中?引入使用?babel-polyfill?兼容低版本瀏覽器方法,需要的朋友可以參考下2023-02-02
基于Vue.js實(shí)現(xiàn)簡(jiǎn)單搜索框
這篇文章主要為大家詳細(xì)介紹了基于Vue.js實(shí)現(xiàn)簡(jiǎn)單搜索框,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-11-11
vue項(xiàng)目ElementUI組件中el-upload組件與圖片裁剪功能組件結(jié)合使用詳解
這篇文章主要介紹了vue項(xiàng)目ElementUI組件中el-upload組件與圖片裁剪功能組件結(jié)合使用,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03
vue實(shí)現(xiàn)輸入一位數(shù)字轉(zhuǎn)漢字功能
這篇文章主要介紹了vue實(shí)現(xiàn)輸入一位數(shù)字轉(zhuǎn)漢字功能,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-12-12
vue跳轉(zhuǎn)方式(打開(kāi)新頁(yè)面)及傳參操作示例
這篇文章主要介紹了vue跳轉(zhuǎn)方式(打開(kāi)新頁(yè)面)及傳參操作,結(jié)合實(shí)例形式分析了vue.js跳轉(zhuǎn)實(shí)現(xiàn)方式與參數(shù)接受相關(guān)操作技巧,需要的朋友可以參考下2020-01-01

