资源路径错误导致白屏的典型表现是白屏但控制台无报错、network面板中index.html返回200而main.js等关键资源未发起请求,根源在于构建产物路径配置错误(如publicpath未设为'./'或homepage缺失),致使浏览器无法加载js入口,渲染流程在执行前即中断。

资源路径错误导致白屏的典型表现
白屏但控制台空空如也,Network 面板里 index.html 返回 200,而 main.js、app.css 根本没发起请求——这是资源路径断裂的明确信号。浏览器连 JS 执行入口都没加载到,自然不会报错。
- 检查
build后生成的asset-manifest.json,确认所有js和css路径是否以./开头(不是/static/或/js/) - 打开
build/index.html,手动验证<script src="..."></script>中的路径是否能对应到实际文件位置(比如js/static/main.xxxx.js) - 确保
package.json里已设置"homepage": "./";若用vue-cli,则需在vue.config.js中设publicPath: './' - 图片、字体等静态资源必须用
import或require引入,CSS 中背景图要用url(./assets/xxx.png),避免写死绝对路径
路由模式不匹配引发的白屏
React 或 Vue 项目默认用 history 模式,但 HBuilderX 打包后的 App 运行在 WebView 中,没有服务端配合,history.pushState 会直接失效,首次加载后路由跳转就卡住甚至白屏。
HBuilderX 是由 DCloud 推出的一款轻量级前端开发工具,在 Linux 系统上主要用于 Web 开发与跨平台应用开发,尤其适合 Vue 和 uni-app 相关项目。
- React 用户:把
<browserrouter></browserrouter>
替换为<hashrouter></hashrouter>,并确保basename设为"/"(不是空字符串) - Vue 用户:在
router/index.js中显式指定mode: 'hash' - HBuilderX 的
manifest.json中也要同步配置:"router": {"mode": "hash"},否则云打包可能忽略前端设置 - 不要依赖
process.env.NODE_ENV === 'production'动态切 mode——构建时环境变量已固化,运行时无法回退
运行环境差异导致的静默崩溃
开发时跑在 Chrome 里一切正常,打包后白屏且控制台只有一条 reportJSException >>>> exception function:createInstanceContext, exception:white screen cause create instanceContext failed ——这说明代码执行前就被引擎拦截了,常见于调用了 WebView 不支持的 API。
- 禁止在任何生命周期或初始化逻辑中使用
document、window、localStorage、XMLHttpRequest等浏览器专属对象 - 第三方库如果内部硬编码了 DOM 操作(比如某些图表库),需用
if (typeof document !== 'undefined')包裹,或改用uni提供的跨端 API(如uni.setStorage) - Android 4.4–6.0 的系统 WebView 对 Promise、async/await 支持不全,必须引入
core-js/stable和regenerator-runtime/runtime - 真机调试务必用
chrome://inspect连接,模拟器日志常被截断,很多关键错误根本看不到
manifest.json 和云打包配置的隐藏陷阱
很多白屏问题出在 manifest.json 的细微配置上,尤其是云打包时证书和内核选项选错,会导致资源加载策略异常。
-
"plus": {"kernel": {"ios": "UIWebView"}}可强制降级渲染引擎,解决 iOS 旧版 WebKit 对现代 CSS 的兼容问题 - Android 打包必须选「DCloud 公用证书(新版)」,老版证书在 Android 12+ 上会被系统拒绝加载脚本
-
"networkTimeout": {"request": 30000}必须显式设置,否则默认超时仅 10 秒,API 响应稍慢就直接中断,页面卡在 loading 状态看似白屏 - 不要把整个
build目录直接拖进 HBuilderX 项目根目录——应只复制index.html、js/、css/、assets/,并手动重写index.html中所有资源引用路径为相对路径
homepage 没设对,又用了 history 路由,再加一段未包裹的 document.createElement,三者叠加,错误日志全被吞掉,只剩一片白。调试时得一层层剥开,从 asset-manifest.json 是否干净开始,而不是一上来就翻控制台。










