使用vite发布app存在的所有问题

文章讲述了在使用Vue3.2和Vite2.0开发H5时遇到的低版本安卓浏览器白屏问题。解决方案包括在vite.config.ts中配置build.target为es2015,以及引入@vitejs/plugin-legacy插件以生成传统浏览器兼容的chunk和polyfill。此外,还介绍了Vite打包后dist文件不能在浏览器直接打开的问题,推荐使用http-server启动服务,以及在HBuilderX中发布APP的步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.打包项目的时候,dist里的css和js等文件都在assets,没分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()
          }
        }, 
        // 用于从入口点创建的块的打包输出格式[name]表示文件名,[hash]表示该文件内容hash值
        entryFileNames: 'js/[name].[hash].js', 
        // 用于命名代码拆分时创建的共享块的输出命名
        chunkFileNames: 'js/[name].[hash].js', 
        // 用于输出静态资源的命名,[ext]表示文件扩展名
        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`;
        // },
      }
    }
  }

这样就已经完成了拆分css和js等文件

  

2.这边还需要加一下vite的版本问题,不然后续打包的app,在android或者iOS下载打开可能是白屏的

一、问题

在使用vue3.2和vite2.0+开发一个移动端H5,测试时发现很多低版本的安卓手机浏览器出现白屏的现象,而ios机型基本上是好的,原因是很多低版本浏览器并不支持原生ESM导入的方式,下面给出解决方案:

二、兼容原生ESM的浏览器

默认情况下,Vite 的目标浏览器是指能够 支持原生 ESM script 标签 和 支持原生 ESM 动态导入 的。作为参考,Vite 使用这个 browserslist 作为查询标准:

Chrome >=87
Firefox >=78
Safari >=13
Edge >=88

三、解决方案 
步骤一:  vite.config.ts里 build.target 配置项 指定构建目标为 es2015

步骤二: 通过插件 @vitejs/plugin-legacy 来自动生成传统浏览器的 chunk 及与其相对应 ES 语言特性方面的 polyfill。兼容版的 chunk 只会在不支持原生 ESM 的浏览器中进行按需加载。

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不能直接在浏览器打开

原因
Vite 本身依赖于原生ES模块来做模块加载,而原生ES模块是不支持 file:// 本地访问的。

解决办法
方案一:使用http-server插件启动

1.安装node.js;(已安装跳过)

2.安装http-server。

npm install http-server -g

yarn global add http-server

3、进入dist根目录执行启动项目

http-server

这样就可以在dist文件里运行了。

4.在HBuilderX发布app

1.打开HBuilderX新建一个5+APP项目,并把vue中dist里面的所有文件复制过来(只保留manifest.json文件,其他换成dist文件)

 2.在manifest.json选择对应的信息,

3.点击模板配置需关掉这2个选项

 4.然后点击发行云打包,选择以下几个选项 

 5.打包成功发送这个文件到QQ,手机下载即可

 

### Vite 打包工具使用指南与原理 #### 一、Vite 的基本概念 Vite 是一种新型前端构建工具,它通过原生 ES 模块导入的方式显著提升了开发服务器的启动速度。其核心理念在于将开发环境和生产环境分开处理,在开发环境中利用浏览器对原生模块的支持来减少打包时间;而在生产环境下,则采用 Rollup 进行高效打包[^1]。 #### 二、Vite 的主要特点 - **快速冷启动**:由于 Vite 利用了本地模块解析机制而非传统的打包方式,因此能够实现极快的初始加载。 - **即时热更新 (HMR)**:相比传统方法,Vite 提供更细粒度的 HMR 实现,仅重新加载发生变化的部分代码而不是整个应用页面[^2]。 #### 三、配置 TypeScript 支持 为了支持 TypeScript 类型检查以及增强 IDE 开发体验,可以按照如下步骤操作: 1. 创建 `src/types/env.d.ts` 文件用于定义全局环境变量接口: ```typescript interface ImportMetaEnv { /** * 应用标题 */ VITE_APP_TITLE: string; /** * 应用端口 */ VITE_APP_PORT: number; /** * API基础路径(反向代理) */ VITE_APP_BASE_API: string; } interface ImportMeta { readonly env: ImportMetaEnv; } ``` 上述代码片段展示了如何声明环境变量类型以便于静态分析工具更好地理解项目中的动态注入值。 #### 四、初始化 Vue3 项目并集成 Vite 和 pnpm 以下是具体流程说明: 1. 安装最新版本的 pnpm 工具链至全局范围,命令为 `npm install -g pnpm`. 2. 使用官方推荐模板生成新工程结构,运行指令 `pnpm create vue@latest`. 完成以上两步之后即可获得一个预设好依赖关系的基础框架,其中包含了针对现代 JavaScript 生态优化过的默认设置. #### 五、部署前准备事项 当进入实际发布阶段时需要注意调整部分参数以适应目标平台需求。例如可以通过修改 `.env.production` 文件内的字段来自定义最终产物的行为特性,像指定服务监听地址或者启用特定功能开关等等。 ```javascript // 示例 .env.production 配置项 export const VITE_APP_TITLE = 'My Production App'; export const VITE_APP_PORT = 8080; export const VITE_APP_BASE_API = '/api/'; ``` 此段伪代码表示了可能存在的几个关键属性及其预期用途。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值