Laravel项目中Swagger UI出现webpack资源加载失败及类型错误怎么办?
Laravel Swagger UI 特定端点 TypeError 及资源加载错误的解决
问题现象
在Laravel项目中使用Swagger UI生成API文档(访问地址 http://localhost:8014/api/documentation)时,浏览器控制台出现以下错误,且仅部分API端点触发该问题:
TypeError 错误信息
TypeError: Cannot destructure property 'type' of 'u' as it is undefined. at build-request.js:115:9 at Array.forEach (<anonymous>) at build-request.js:107:30 at Array.forEach (<anonymous>) at applySecurities (build-request.js:106:12) at buildRequest (build-request.js:16:9) at Object.execute_buildRequest [as buildRequest] (index.js:249:11) at actions.js:453:24 at index.js:174:16 at redux.mjs:331:12
附加资源加载错误
Could not load content for webpack://SwaggerUIBundle/src/core/system.js (Fetch through target failed: Unsupported URL scheme; Fallback: HTTP error: status code 404, net::ERR_UNKNOWN_URL_SCHEME)
已知前提:
- 可正常访问文档页面
- API数据结构与Swagger文档一致
- Laravel与Swagger UI版本兼容
- 已清理Swagger缓存并重新生成文档
原因分析
- 核心错误原因:
TypeError是Swagger UI处理请求安全配置时触发的——部分端点的OpenAPI规范中,security配置引用了未正确定义的安全方案,或者全局的SecurityScheme缺少必填的type字段,导致代码解构type属性时遇到undefined值。 - 资源加载错误:属于次要衍生问题,是TypeError触发后Swagger UI内部逻辑异常,导致尝试加载浏览器无法识别的
webpack://协议资源,进而出现404。 - 仅部分端点异常:说明只有这些端点的安全配置存在合规性问题,其他端点的安全配置符合规范。
解决步骤
- 排查触发错误的API端点的Swagger注解,检查
@OA\Security配置,确认是否引用了未在全局@OA\SecurityScheme中定义的安全方案。 - 验证全局
@OA\SecurityScheme配置,确保每个安全方案都包含必填的type字段(例如type="apiKey"、type="http"),且结构完全符合OpenAPI 3.x规范。 - 对于有问题的端点:若该端点无需安全验证,移除多余的
security注解;若需要验证,修正配置使其引用正确的安全方案。 - 重新生成Swagger文档(如执行
php artisan l5-swagger:generate,针对l5-swagger包),清理浏览器缓存后重新测试。 - 若资源加载错误仍存在,重新发布Swagger UI静态资源:执行
php artisan vendor:publish --tag=l5-swagger-assets,再次清理缓存测试。
内容的提问来源于stack exchange,提问作者Ahmad Badpey
相关产品推荐
相关产品推荐

