AWS lambdaで使用するnodeのバージョンを18にアップデートしました。
node18ではAWS lambdaに含まれるAWS SDK for JavaScriptがv3になっています。そのため、ローカル環境で使用するAWS SDK for JavaScriptもv2->v3に変更しました。
その際、 webpackから使用しているbabelのトランスコンパイルでnull合体演算子(Nullish coalescing operator)(??)でエラーが発生しました。
1 2 3 4 5 6 7 8 | 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合体演算子に対応しておらずエラーになっているようです。
修正前
1 2 3 4 5 6 7 8 9 10 11 | "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はバージョンを上げます。
1 2 3 4 5 6 7 8 9 10 11 12 | "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