현재 es6가 많이 이용되고 있긴 하나 브라우저가 es6의 모든 기능을 지원하는 것은 아니다. 그래서 babel이라는 트랜트컴파일러를 이용해 es5로 변환해서 배포 해야한다. 이 글에서는 gulp를 활용한 babel 사용법을 정리해본다.
기본 프로젝트 구조
1 2 3 4 5 6
| ├─ .babelrc ├─ gulpfile.js ├─ package.json └─ src └─ js └─ lib.js
|
설치목록
1 2 3 4 5
| npm install -g gulp npm install --save-dev gulp gulp-babel npm install --save-dev @babel/preset-env npm install --save-dev @babel/core npm install --save-dev gulp-sourcemaps
|
gulp
gulp 명령어로 gulpfile.js를 실행할 수 있다
gulp-babel
gulp를 이용해 babel을 사용할 수 있게 해주는 패키지다
@babel/preset-env
최신 javascript를 변환해 줄 수 있는 패키지다.
@babel/core
gulp-babel의 peer dependency라고 하는데 뭔 뜻인지 모르겠다. 일단 필요하니까 설치한다
gulp-sourcemaps
변환된 코드와 변환되기 전 코드를 매핑해주는 패키지
그리고 프로젝트 폴더에 .babelrc 파일을 생성하고 다음과 같이 작성한다.
1 2 3
| { "presets": ["@babel/preset-env"] }
|
es6코드 작성
이제 es6코드를 src/js/lib.js 에 작성한다
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| let sum = (a, b) => a + b;
console.log(sum(3, 4));
const sentences = [ { subject: "JavaScript", verb: "is", object: "great" }, { subject: "papago", verb: "are", object: "large" } ];
const say = ({ subject, verb, object }) => { console.log(`${subject}${verb}${object}`); };
for (let s of sentences) { say(s); }
|
노드를 이용해 코드를 먼저 실행해본다
출력내용
1 2 3
| 7 JavaScriptisgreat papagoarelarge
|
gulpfile 코드 작성
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| var gulp = require('gulp'); var babel = require('gulp-babel'); var sourcemaps = require('gulp-sourcemaps');
gulp.task('babel', function() { return gulp.src('src/**/*.js') .pipe(sourcemaps.init()) .pipe(babel()) .pipe(sourcemaps.write('./', {sourceRoot: '../src'})) .pipe(gulp.dest('dist')); });
gulp.task('watch',function(){ gulp.watch('src/**/*.js',gulp.series('babel')); });
|
자세한 설명은 생략한다
이제 gulp 명령어로 babel을 실행해본다
컴파일되어 생성된 dist 폴더
1 2 3 4 5 6 7 8 9 10
| ├─ .babelrc ├─ gulpfile.js ├─ package.json ├─ dist └─ js ├─ lib.js └─ lib.js.map └─ src └─ js └─ lib.js
|
gulp watch 관련 이슈
이전에 하던대로 watch 코드를 작성 후 돌려봤는데 오류가 떴다.
1 2
| Error: watching app/css/*.css: watch task has to be a function ... 어쩌구
|
구글링 해보니 gulp 버전이 업되면서 사용법이 달라졌던 것이다.
gulp 3.x 버전
1 2 3 4 5
| gulp.task('watch', function() { gulp.watch('app/css/*.css', ['styles']); gulp.watch('app/js/*.js', ['scripts']); gulp.watch('app/img/*', ['images']); });
|
gulp 4.x 버전
1 2 3 4 5
| gulp.task('watch', function() { gulp.watch('app/css/*.css', gulp.series('styles')); gulp.watch('app/js/*.js', gulp.series('scripts')); gulp.watch('app/img/*', gulp.series('images')); });
|