오늘은 바벨(Babel)에 대해 이야기를 해볼 예정이다 🧐
모든 웹 브라우저가 ES6를 지원하지 않고 지원하더라도 모든 ES6 기능을 지원하지 않는다.
가장 유명한 도구가 바벨(Babel)이고 나 또한 프로젝트에서 기존에 바벨을 추가하여 사용하고 있었다.
<script type="text/javascript"
src="https://cdnjs.cloudflare.com/ajax/libs/babel-standalone/6.26.0/babel.min.js"></script>
하지만 브라우저 테스트를 하던 중 IE에서 아래와 같은 오류가 났다. 참고로 Chrome과 FireFox에서는 정상작동하였다.
개체가 'from' 속성이나 메서드를 지원하지 않습니다.
알고 보니 기존에 js 파일에서 아래와 같은 Set 함수를 쓰고 있었다.
let uniqueArr = [];
let set = new Set(arr);
uniqueArr = [...set];
Babel과 Polyfill은 구분되어야하는 개념이다.
Babel
은 Javascript의 Syntax가 아닌 것들을 Javascript에서 사용할 수 있게 만들어 줌
Polyfill
은 Javascipt의 Syntax로 읽히지만 정의되어 있지 않은 객체들을 정의해주는 개념
예를들면 Set 객체는 기존에 존재하지 않는 ES6에서 추가된 객체이다.
ES6 이전에 new Set()를 사용하는 경우 Javascript Syntax이지만 정의되는지 않는 function이라는 의미에서 Set is not function의 결과를 보여준다.
Polyfill 개념을 이용해 Set과 같은 객체를 사용할 수 있도록 정의해주는 것을 Babel-Polyfill이다.
따라서 아래와 같은 스크림트를 추가해주니 해결이 되었다!
<script type="text/javascript"
src="https://cdnjs.cloudflare.com/ajax/libs/babel-polyfill/7.10.4/polyfill.min.js"></script>
참고
https://songeunjung92.tistory.com/47
https://athena7.tistory.com/entry/ES6-%EB%B8%8C%EB%9D%BC%EC%9A%B0%EC%A0%80%EC%97%90%EC%84%9C-%EB%B0%94%EB%B2%A8babel%EC%9D%84-%ED%86%B5%ED%95%9C-%ED%8A%B8%EB%9E%9C%EC%8A%A4%ED%8C%8C%EC%9D%BC%EB%A7%81