AWS lambdaで使用するnodeのバージョンを18にアップデートしました。
node18ではAWS lambdaに含まれるAWS SDK for JavaScriptがv3になっています。そのため、ローカル環境で使用するAWS SDK for JavaScriptもv2->v3に変更しました。
その際、 webpackから使用しているbabelのトランスコンパイルでnull合体演算子(Nullish coalescing operator)(??)でエラーが発生しました。
ERROR in C:/Users/hoge/fuga/node_modules/@aws-sdk/middleware-logger/dist-es/loggerMiddleware.js 13:53
Module parse failed: Unexpected token (13:53)
You may need an appropriate loader to handle this file type.
| clientName,
| commandName,
> input: (overrideInputFilterSensitiveLog ?? inputFilterSensitiveLog)(args.input),
| output: (overrideOutputFilterSensitiveLog ?? outputFilterSensitiveLog)(outputWithoutMetadata),
| metadata: $metadata,
どうやらwebpackやbabelのバージョンが古いために、ES2020で導入されたnull合体演算子に対応しておらずエラーになっているようです。
修正前
"devDependencies" : {
"@babel/core" : "~7.1.x",
"@babel/preset-env" : "~7.1.x",
"babel-core" : "~7.0.0-bridge.x",
"babel-jest" : "~23.6.x",
"babel-loader" : "~8.0.x",
"aws-sdk": "~2.323.x",
"webpack" : "~4.16.x",
"webpack-cli" : "~3.1.x",
"terser-webpack-plugin" : "~1.1.x"
}
修正後
terser-webpack-pluginはwebpack5からは同梱されいるので削除します。bable、webpack、aws-sdkはバージョンを上げます。
"devDependencies" : {
"@babel/core" : "~7.21.0",
"@babel/preset-env" : "~7.20.2",
"babel-core" : "~7.0.0-bridge.0",
"babel-jest" : "~29.4.3",
"babel-loader" : " ~8.3.0",
"@aws-sdk/client-s3" : "~3.282.0",
"@aws-sdk/signature-v4-crt" : "~3.282.0",
"aws-crt" : "~1.15.9",
"webpack" : "~5.74.0",
"webpack-cli" : "~5.0.1"
}
node_modulesの中を一旦全て削除してから、以下を実行することでエラーが無くなりました。
npm i