- 发布:2025-11-26 10:22
- 更新:2026-09-15 11:10
- 阅读:943
您的问题"部署H5到服务器后提示连接服务器超时"常见于跨域或配置问题。根据知识库:
-
检查manifest.json配置:确保h5节点中设置了正确的base路径(如
router.base = "/html5"),如果部署在子目录。参考发行H5注意事项 -
网络超时设置:在manifest.json中增加networkTimeout配置,例如:
"h5": { "router": { "base": "/your-path/" }, "networkTimeout": { "request": 10000 // 单位毫秒 } } -
跨域问题:H5端受浏览器同源策略限制,需在服务器配置CORS头。参考H5跨域解决方案
-
部署路径验证:确认资源已正确部署到
unpackage/dist/build/web目录,且服务器能正常访问该路径。
若仍无法解决,请检查服务器防火墙设置及网络连通性。
套马杆的套子 - 找AI、用AI、信AI
你看下manifest.json中,路由模式,还有运行的基础路径
打比方,如果你想要域名+admin访问,你就hash模式,然后运行基础路径就配上/admin/就行,然后前端托管的文件夹,就是admin
骑猪o0o找牛 - 一挖一麻袋
uni的 页面组件 都是 异步的
vue3版本
首先会 处理 pages.json,用的插件是 uni:h5-pages-json
export function uniPagesJsonPlugin(): Plugin {
return defineUniPagesJsonPlugin((opts) => {
return {
name: 'uni:h5-pages-json',
enforce: 'pre',
transform(code, id, opt) {
if (opts.filter(id)) {
// 只处理 结尾是 `pages-json-js`
const { resolvedConfig } = opts
const ssr = isSSR(opt)
if (process.env.UNI_APP_X === 'true') {
// Uniappx 的处理
// 调整换行符,确保 parseTree 的loc正确
code = code.replace(/\r\n/g, '\n')
try {
checkPagesJson(preUVueJson(code), process.env.UNI_INPUT_DIR)
} catch (err: any) {
if (err.loc) {
const error = createRollupError(
'uni:app-pages',
'pages.json',
err,
code
)
this.error(error)
} else {
throw err
}
}
}
return {
// 动态生成代码
code:
registerGlobalCode(resolvedConfig, ssr) +
generatePagesJsonCode(ssr, code, resolvedConfig),
map: { mappings: '' },
}
}
},
}
})
}
其中
function generatePagesJsonCode(ssr, jsonStr, config) {
// 获取 全局 对象 , h5就是 windown对象咯
const globalName = getGlobal(ssr);
// jsonStr 就是 pages.json中的文本内容, 根据 平台 过滤掉无用的数据
const pagesJson = (0, uni_cli_shared_1.normalizePagesJson)(jsonStr, process.env.UNI_PLATFORM);
// 处理大屏 topWindow , leftWindow, rightWindow
const { importLayoutComponentsCode, defineLayoutComponentsCode } = generateLayoutComponentsCode(globalName, pagesJson);
/*
这里 会遍历 pages.json , 会使用 defineAsyncComponent 把每个 页面变成 异步组件, 例如
const PagesIndexIndexLoader = ()=>import('./pages/index/index.vue').then(com => setupPage(com.default || com))
const PagesIndexIndex = defineAsyncComponent(extend({loader:PagesIndexIndexLoader},AsyncComponentOptions))
*/
const definePagesCode = generatePagesDefineCode(pagesJson, config);
// 挂载 __uniRoutes到 window上
const uniRoutesCode = generateRoutes(globalName, pagesJson, config);
// 挂载__uniConfig 配置 到 window
const uniConfigCode = generateConfig(globalName, pagesJson, config);
/*
生成 多条 import xxxxx.css
例如
import '@dcloudio/uni-h5/style/framework/base.css'
import '@dcloudio/uni-h5/style/framework/async.css'
import '@dcloudio/uni-h5/style/framework/pageHead.css'
*/
const cssCode = generateCssCode(config);
const vueType = process.env.UNI_APP_X === 'true' ? 'uvue' : 'nvue';
return `
import { defineAsyncComponent, resolveComponent, createVNode, withCtx, openBlock, createBlock } from 'vue'
import { PageComponent, useI18n, setupWindow, setupPage } from '@dcloudio/uni-h5'
import { appId, appName, appVersion, appVersionCode, debug, networkTimeout, router, async, sdkConfigs, qqMapKey, googleMapKey, aMapKey, bMapKey, aMapSecurityJsCode, aMapServiceHost, ${vueType}, locale, fallbackLocale, darkmode, themeConfig } from './${uni_cli_shared_1.MANIFEST_JSON_JS}'
const locales = import.meta.glob('./locale/*.json', { eager: true })
${importLayoutComponentsCode}
const extend = Object.assign
${cssCode}
${uniConfigCode}
${defineLayoutComponentsCode}
${definePagesCode}
${uniRoutesCode}
${config.command === 'serve' ? hmrCode : ''}
export {}
`;
}
那么
const PagesIndexIndex = defineAsyncComponent(extend({loader:PagesIndexIndexLoader},AsyncComponentOptions))
就是 定义 异步 组件咯,
h5默认的 配置
https://uniapp.dcloud.net.cn/collocation/manifest.html#h5-async
const defaultAsync = {
loading: 'AsyncLoading',
error: 'AsyncError',
delay: 200,
timeout: 60000,
suspensible: true,
};
异步加载 出错了 , 显示的 组件是 AsyncError
const AsyncErrorComponent = /* @__PURE__ */ defineSystemComponent({
name: "AsyncError",
setup() {
initI18nAsyncMsgsOnce();
const {
t: t2
} = useI18n();
return () => createVNode("div", {
"class": "uni-async-error",
"onClick": reload
}, [t2("uni.async.error")], 8, ["onClick"]);
}
});
显示的 国际化就是
{
"uni.async.error": "连接服务器超时,点击屏幕重试",
}