AzureStaticWebApp升级Node/NPM后触发triggerUncaughtException问题求助
问题分析与解决方案
核心结论
添加node-options="--unhandled-rejections=warn"到.npmrc,或者NODE_OPTIONS=--unhandled-rejections=warn到.env无法解决你遇到的退出码1问题。
原因解析
从错误日志可以明确看到,崩溃的根源是权限不足:
[Error: EACCES: permission denied, mkdir '/root/.cache/ms-playwright']
这个错误导致Playwright的安装脚本install.js抛出未被捕获的异常,进而触发triggerUncaughtException使进程退出。而--unhandled-rejections=warn的作用只是将未处理的Promise拒绝从"终止进程"改为"输出警告",但它无法解决导致异常的根本原因——权限问题。
实际解决办法
1. 解决Playwright缓存目录权限问题
你可以通过以下几种方式规避目录权限限制:
- 指定自定义缓存路径:在
.env文件中添加环境变量,让Playwright将浏览器缓存存放在当前项目目录下(非root路径,权限可控):
或者在安装命令中临时设置:PLAYWRIGHT_BROWSERS_PATH=./.playwright-cachePLAYWRIGHT_BROWSERS_PATH=./.playwright-cache npm install - 使用unsafe-perm参数安装:安装Playwright时添加
--unsafe-perm=true,允许npm以root权限运行安装脚本(注意:此操作存在一定安全风险,仅在可信环境中使用):npm install playwright --unsafe-perm=true - 调整Azure Static Web Apps的运行用户:如果Azure允许,配置构建步骤使用非root用户执行npm命令,避免写入
/root目录的权限问题。
2. 对等依赖冲突的长期修复
虽然你已通过legacy-peer-deps=true暂时解决了依赖警告,但建议长远来看:
- 升级
material-table到支持date-fns@2.x的版本(当前使用的material-table@1.69.3依赖的@date-io/date-fns@1.1.0仅支持date-fns@2.0.0-alpha.27) - 或调整
@date-io/date-fns的版本,使其与项目中的date-fns@2.29.3兼容
关于Playwright测试用例的补充
你的测试用例本身没有明显问题,但需确保在权限问题解决后,Playwright能正常下载并启动浏览器。如果后续仍有异常,可检查ENV.BASE_URL是否正确配置,以及axeOption是否定义完整。
内容的提问来源于stack exchange,提问作者Abhishek Konnur
相关产品推荐
相关产品推荐

