基于aws-lambda构建无服务器apollo-server时部署失败报错
问题原因
- 核心为
serverless-webpack 5.4.4版本与当前环境存在兼容缺陷:该版本插件内部用于解析webpack构建输出路径的正则表达式,无法适配Node.js 16.x版本下生成的路径格式,正则匹配返回null后代码未做空值校验,直接访问null[1]触发TypeError。 - 删除plugins和custom配置后相当于停用了serverless-webpack插件,跳过了插件的路径解析逻辑,因此可以正常部署,但会失去webpack打包能力。
解决方案
以下方案任选其一即可:
- 方案一:升级serverless-webpack到兼容版本
执行命令升级插件到5.5.0及以上版本,该版本已官方修复对应正则匹配兼容问题:
升级后保持原有serverless.yml的plugins、custom配置不变,重新执行npm install serverless-webpack@latest --save-devsls deploy --verbose即可正常部署。 - 方案二:降级Node.js版本(临时适配方案)
若暂时不方便升级插件,可将Node.js版本降级到14.x系列,该版本Node.js生成的路径格式可被serverless-webpack 5.4.4正常解析。 - 方案三:临时修改插件内部逻辑(应急方案,不推荐长期使用)
打开项目目录下node_modules/serverless-webpack/lib/cleanup.js文件,找到路径匹配的相关代码段,在取数组索引前增加空值判断,例如将result[1]修改为result?.[1] || ''即可规避报错。
内容的提问来源于stack exchange,提问作者Edwin
相关产品推荐
相关产品推荐

