使用Webpack打包AWS Lambda@Edge代码时无法解析aws-jwt-verify/error模块
问题
打包用于AWS Lambda@Edge的Node.js代码时遇到以下错误:
Module not found: Error: Can't resolve 'aws-jwt-verify/error'
用TypeScript编译时无报错,但Webpack打包触发该问题。相关配置如下:
package.json 依赖配置
"devDependencies": { "@types/aws-lambda": "^8.10.121", "@types/cookie": "^0.5.2", "@types/node": "^20.6.2", "aws-sdk": "^2.1459.0", "html-loader": "^2.1.2", "ts-loader": "^8.2.0", "typescript": "^4.0.0", "webpack": "^4.47.0", "webpack-cli": "^4.10.0" }, "dependencies": { "aws-jwt-verify": "^4.0.0", "aws-lambda": "^1.0.7", "cookie": "^0.5.0", "fs": "0.0.2", "sass-loader": "^10.4.1" }
webpack.config.js 配置
const path = require('path'); module.exports = { entry: './index.ts', module: { rules: [ { test: /\.html$/, use: 'html-loader' }, { test: /\.tsx?$/, use: 'ts-loader', exclude: /node_modules/, } ], }, resolve: { extensions: ['.tsx', '.ts', '.js'] }, output: { filename: 'bundle.js', path: path.resolve(__dirname, './'), libraryTarget: 'commonjs', }, target: 'node', devtool: 'source-map' };
解决方案
1. 规范导入语句
先确认aws-jwt-verify/error的导入写法是否正确,正确的导入方式如下:
import { CognitoJwtVerifier } from "aws-jwt-verify"; import { JwtInvalidError } from "aws-jwt-verify/error";
2. 升级Webpack版本(优先推荐)
Webpack 4对现代包的ES模块子路径导出支持有限,而aws-jwt-verify@4.x采用了更现代的模块结构。升级到Webpack 5可以彻底解决这类兼容性问题:
npm install webpack@latest webpack-cli@latest --save-dev
升级后基础配置无需大幅调整,target: 'node'和libraryTarget: 'commonjs'等核心设置可以保留。
3. 调整Webpack 4的resolve配置(不升级时的临时方案)
如果暂时无法升级Webpack,可在resolve中添加mainFields配置,强制Webpack优先读取包的CommonJS入口文件:
resolve: { extensions: ['.tsx', '.ts', '.js'], mainFields: ['main', 'module'] // 优先加载main字段对应的CommonJS模块 }
4. 重新安装依赖
删除现有依赖文件后重新安装,避免依赖损坏导致的模块查找失败:
rm -rf node_modules package-lock.json npm install
内容的提问来源于stack exchange,提问作者Danny Ellis Jr.
相关产品推荐
相关产品推荐

