JS - Babel Support - by. UXKM

요약 설명

브라우저에는 다양한 종류와 버전이 있고, 다양한 자바스크립트 엔진이 있습니다.
모든 브라우저 사용자가 최신 버전의 브라우저를 사용하는 건 불가능한 일이고, 모든 사용자에 대한 일괄 업데이트를 적용한다는 것도 불가능한 일입니다.
그렇다고 구형 브라우저에서 구동이 되는 프로그램을 만들기 위해 지저분한 코드를 계속 쓸 수는 없는 일이며, 최신 기능을 포기하고 개발하는 것도 말이 안 되는 일입니다.

최신의 javascript 코드를 작성하면서도 최대한 많은 사람들이 사용하는 데에 불편함이 없도록 만들어주는게 바벨(Babel)입니다.

6.2.1. Babel 이란?

BabelECMAScript 2015 (ES6) 이상의 JavaScript 코드를 이전 버전의 JavaScript로 변환해 주는 오픈 소스 JavaScript 트랜스파일러(transpiler)입니다.
이를 통해 최신 버전의 JavaScript 문법 및 기능을 사용하여 코드를 작성하고, 이를 이전 브라우저나 환경에서도 동작하도록 변환할 수 있습니다.

Babel의 기능은 다음과 같습니다.
  1. ES6+ 문법 변환: Babel은 ES6 이상의 JavaScript 문법을 ES5로 변환해 줍니다. 예를 들면, 화살표 함수, 클래스, let 및 const 키워드 등이 있습니다.
  2. 모듈 변환: Babel은 모듈 시스템을 지원하지 않는 환경에서 사용되는 CommonJS나 AMD와 같은 모듈 시스템을 변환해 줍니다.
  3. 환경 대응 (Polyfill): Babel은 브라우저나 환경이 지원하지 않는 새로운 JavaScript 메서드나 함수를 사용할 수 있도록 폴리필(polyfill)을 제공합니다. 이를 통해 새로운 기능을 구현할 때 호환성 문제를 해결할 수 있습니다.
  4. 트랜스파일러 (Transpiler): Babel은 소스 코드를 받아서 변환만 하는 트랜스파일러로, 코드의 실행 흐름을 변경하지 않습니다.

Babel은 여러 플러그인과 프리셋을 지원하여 사용자가 필요에 따라 변환 규칙을 추가하거나 사용할 수 있습니다. 주로 프론트엔드 개발에서 브라우저 호환성 및 최신 기능 사용을 위해 널리 사용되고 있습니다.

6.2.2. 패키지 설치

터미널에서 아래 명령을 실행하여 패키지를 설치합니다.

gulp-bro

gulp-bro는 Gulp를 사용하여 Browserify를 실행하는 데 도움을 주는 Gulp 플러그인입니다.
Browserify는 CommonJS 스타일의 모듈을 브라우저에서 사용 가능한 형태로 번들링 하는 도구로서, gulp-bro를 사용하면 Gulp와 함께 Browserify를 더 쉽게 통합할 수 있습니다.

또한, gulp-bro를 사용하면 Browserify와 함께 다른 플러그인들을 함께 사용하여 소스 맵 생성, Babel 변환 등을 수행할 수 있습니다.
이를 통해 모던 자바스크립트 코드를 브라우저에서 실행 가능한 형태로 변환하고 최적화할 수 있습니다.

babelify

babelifyBrowserify를 사용하여 ES6+ 코드를 이전 버전의 JavaScript로 변환하는 데 사용되는 Browserify 플러그인입니다.
주로 최신 ECMAScript 표준을 준수하는 코드를 브라우저에서 지원되는 이전 버전의 JavaScript로 변환할 때 사용됩니다.

babelify는 Babel을 Browserify에서 사용할 수 있도록 도와주는 플러그인이며, Babel은 ES6+ 코드를 ES5로 변환해 주는 데에 특화되어 있습니다.

uglifyify

uglifyifyBrowserify 번들에 속한 JavaScript 파일을 압축하는 Browserify 플러그인 중 하나입니다.
주로 브라우저에서 실행되는 클라이언트 측 JavaScript 코드를 최소화하고 압축하는 데 사용됩니다.

uglifyifyUglifyJS를 사용하여 JavaScript 코드를 압축하고 난독화합니다. 이는 코드 크기를 줄이고 웹 페이지 로딩 속도를 향상시키는 데 도움이 됩니다.

6.2.3. gulpfile.babel.js 세팅

gulpfile.babel.js 파일의 코드를 아래처럼 추가 및 수정합니다. (영역별 설명은 주석으로 대체합니다.)
변경이 없는 부분은 생략되며, 추가된 부분수정, 삭제된 부분의 코드만 표시됩니다.
또한 변경 없음, 추가된 부분, 수정, 삭제된 부분을 표시하는 텍스트는 마우스 드래그로 선택되지 않으므로 편리하게 코드를 복사할 수 있습니다.
전체 코드는 에디터기 오른쪽 [View full code]를 클릭하여 확인할 수 있습니다.

6.2.4. gulp dev 실행

gulpfile.babel.js 파일을 세팅한 후 터미널에서 아래 명령을 실행합니다.

Gulp가 샐행되고 터미널에 Gulp의 작업 내용이 출력됩니다.

gulp dev 실행시 터미널에 작업내용 출력

css 다음으로 js가 실행되는 것을 확인할 수 있습니다.

6.2.5. 빌드된 js 결과물 확인

6.2.5.1. js 파일 확인

dist > assets > js 폴더 안에 main.jsmain.js.map, main.min.js 파일이 트렌스파일 되어 있는 것을 확인할 수 있습니다.
src 폴더util.jsmain.js에 병합되어 트렌스파일 되기 때문에 dist 폴더에는 존재하지 않습니다.

빌드 후 dist > assets > js 폴더 확인

6.2.5.2. Console 확인

우리는 이전에 main.js, util.js 두 개의 파일을 미리 세팅하였습니다.
(2. Gulp 기본 설정 > 2.4. Gulp 기초 세팅 > 2.4.3. 작업 폴더 생성 및 기초 파일 세팅 > js 파일 세팅)

미리 세팅한 스크립트의 내용은 Console에 두 개의 랜덤 한 숫자를 표시하라는 내용입니다.
Console에 표시될 첫 번째 숫자는 0~9, 두 번째 숫자는 10~19입니다.

빌드가 완료된 후 개발자 모드를 열고 콘솔에 숫자가 표시되는지 확인합니다.
(개발자 모드 열기 : F12 or 브라우저 context 메뉴 > 검사)

※ Console의 경고 문구는 visual.png 이미지를 불러오지 못하여 생긴 경고입니다. 다음 섹션 [6.3. image 최적화]에서 image task를 세팅하기 때문에 지금이 정상입니다.