vue打包部署后出现白屏的问题

本文针对iOS10.x设备上出现的白屏问题,深入分析了JS加载错误的原因,并提供了一种通过修改webpack配置来避免Safari浏览器解析错误的解决方案。

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

版本支持

对于IOS 10.x无法打开的问题,加载js出错,出现白屏的情况。

具体表现:

打包后手机浏览器输入地址无法打开,Android手机浏览器及QQ等均正常打开,但是IOS手机(系统为10.X的手机,11.X以上的可以正常打开)浏览器,QQ自带浏览器,微信自带浏览器均无法打开。
网络请求没有问题,页面显示白屏

原因:

js加载时出现问题,出现错误
可能报错

1、SyntaxError: Cannot declare a const variable twice: 'e'.
(匿名函数) — vendor.05fd1a5517cb07c89e07.js:43937
t — bootstrap 22fce2de55b8522ae8a5:54
以及
2、[Error] TypeError: undefined is not an object (evaluating 'r[n].call')
    t (manifest.2ae2e69a05c33dfc65f8.js:1:410)
    NHnr (app.0cada6c24949117a7a34.js:1:774647)
    t (manifest.2ae2e69a05c33dfc65f8.js:1:415)
    webpackJsonp (manifest.2ae2e69a05c33dfc65f8.js:1:286)
    全局代码 (app.0cada6c24949117a7a34.js:1)

解决方案:

其实我们都没有错,我们也没写错,uglify也没搞错,错的是Safari本身。他们在第十七万一千零四十一号bug中承认了自己的错误:

  1. 进入build文件夹;
  2. 找到webpack.prod.conf.js文件;
  3. UglifyPlugin的定义里添加关于mangle的选项,使它变成下面这个样子:
new UglifyJsPlugin({
      uglifyOptions: {
        compress: {
          warnings: false
        },
        mangle: {
          safari10: true
        }
      },
      sourceMap: config.build.productionSourceMap,
      parallel: true
    }),
### Vue 项目打包部署白屏的原因分析与解决方案 Vue 项目白屏问题通常由多种原因引起,以下是常见的几种可能性及其对应的解决办法: #### 1. **路径配置错误** 当 Vue 应用被打包部署到服务器时,如果 `publicPath` 配置正确,可能会导致静态资源无法正常加载,从而引发白屏现象。 - 如果应用部署在根目录下,则可以在 `vue.config.js` 中设置 `publicPath` 为 `'/'`[^3]。 - 若部署在子目录中(例如 `/my-vue-app/`),则应将 `publicPath` 设置为对应路径,如 `'/my-vue-app/'`。 ```javascript module.exports = { publicPath: process.env.NODE_ENV === 'production' ? '/my-vue-app/' : '/' }; ``` #### 2. **HTML 文件缓存** 浏览器可能对旧版本的 HTML 文件进行了缓存,在某些情况下会忽略新的 JavaScript 或 CSS 资源文件的变化,进而造成白屏。可以通过修改服务端响应头来控制缓存策略[^2]。 对于未使用 Nginx 的场景,可以尝试以下方式: - 修改 HTML 文件名中的哈希值以强制刷新缓存。 - 使用 `<meta>` 标签禁用页面缓存,例如: ```html <meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate"> <meta http-equiv="Pragma" content="no-cache"> <meta http-equiv="Expires" content="0"> ``` #### 3. **JavaScript 错误** 运行时 JavaScript 报错也可能导致白屏。这种问题通常是由于依赖库缺失、语法错误或者环境兼容性引起的。建议开启生产模式下的错误提示功能以便定位具体问题所在。 - 可以通过查看浏览器开发者工具中的 Console 和 Network 板块获取更多信息。 - 确保所有第三方插件均已正确安装且版本匹配。 #### 4. **跨域请求失败** 如果前端需要调用后端接口而发生跨域问题,并且未能妥善处理 CORS 头部信息的话,也有可能触发异常而导致界面卡死于初始状态即所谓的“白屏”。因此需确认 API 地址是否可达以及相应的安全机制设定得当与否[^1]。 --- ### 总结代码片段示例 下面提供一段简单的脚本用于调试阶段快速验证是否存在基础性的 JS 执行障碍: ```javascript // main.js or app entry point file window.onerror = function (msg, url, lineNo, columnNo, error) { console.error(`Error Message: ${msg}`); alert('An unexpected error occurred while loading the application.'); }; try { new Vue({ render: h => h(App), }).$mount('#app'); } catch (e) { console.error(e); } ``` 此部分逻辑可以帮助捕获全局范围内的未被捕获异常事件并向终端用户提供友好的反馈消息而是单纯呈现一片空白区域给用户看到。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值