-
[AWS-CodeBuild] syntaxerror unexpected token '?'AWS 2023. 8. 25. 14:38
어떤 에러인가?
/codebuild/output/src*/node_modules/typescript-paths/lib/core.js:230 return ... ?? ... syntaxerror unexpected token '?' ...
위와 같은 Syntax Error가 발생했습니다. 에러 로그에서 볼 수 있는 "??"은 javascript의 nullish 연산자입니다.
자 이제부터 무엇이 문제인지 찾아봅시다!조치1
nullish 연산자는 ES2020 문법입니다. 따라서 프로젝트에서 ES2020 버전과 호환이 가능하게 설정하였는지 살펴봅니다.
{ "compilerOptions": { "target": "ESNext", "lib": [ "ESNext", "dom", "dom.iterable", ], ... } }
target과 lib에 latest(가장 최근 javascript 버전)로 충분히 ES2020을 지원하고도 남습니다.
다시 빌드를 돌려봅니다.
하지만! 동일한 에러가 발생했습니다.조치2
ES2020은 node 14 버전 이상에서 돌아갑니다.
그러면 node 버전을 맞추면 되겠지요?
buildspec.yaml 파일을 살펴봅니다.
# buildspec.yaml phases: install: runtime-versions: nodejs: latest # nodejs 버전 설정
nodejs 버전을 latest로 설정하였습니다. 하지만 동일한 에러가 발생했습니다.
그러면 nodejs 버전을 14로 고정하여 설정 해보고 빌드를 돌려봤습니다. 에러 문구만 바뀌었을 뿐 에러는 여전했습니다.
Unknown runtime version named '14' of nodejs. This build image has the following versions: 10, 12
하지만 이번 에러 로그에서 힌트를 얻을 수 있습니다
"이 빌드 이미지에는 다음과 같은 버전이 포함되어 있습니다: 10, 12"
즉, 14 버전이 없었습니다.
문제 파악 완료!
프로젝트 환경은 아무런 문제 없이 옳은 방향으로 설정되어 있었는데 에러가 발생한 것이기에 원인은 CodeBuild 빌드 환경에 있을 것입니다.
CodeBuild를 열고 해당 빌드 프로젝트를 들어가서 빌드 세부 정보 -> 환경을 보면 이미지가 있을 것입니다.
현재 이미지는 "aws/codebuild/amazonlinux2-x86_64-standard:3.0"
3.0 버전은 Node.js 12.x 버전이 기본으로 포함되어 있습니다. 14 버전은 사용이 불가능합니다.
우리는 14 버전이 필요하기에 이미지 4.0 버전으로 올려줍니다.
"aws/codebuild/amazonlinux2-x86_64-standard:4.0"4.0 버전은 Node.js 14.x을 기본적으로 포함하고 있습니다.
다시 빌드를 돌려보니 정상적으로 빌드되었습니다.
끗!
728x90반응형