npm i parcel --save-dev: –save-dev는 develop 환경에서만 필요한 패키지를 다운받을 때 사용하는 옵션
npx parcel index.html로 parcel을 사용해보자.
parcel을 사용할 경우 html 파일에서 <script type="module src=""></script> 과 같이 module 타입을 명시하고 모듈을 사용하는 방식이 더이상 동작하지 않는다.
parcel은 dist 폴더에 코드에 필요한 모듈을 정리해서 파일들을 만들고 번들링 해준다.
if (module.hot) {
module.hot.accept();
}
빠른 모듈 교체(HMR, Hot Module Replacement)는 런타임에 페이지 새로고침 없이 모듈을 자동으로 갱신해준다.
import cloneDeep from 'lodash-es';
parcel을 사용하면 위와 같이 패키지 이름만 명시해도 모듈을 불러올 수 있다.
이미 설치 되지 않은 패키지라면 자동으로 설치해서 package.json dependencies에 추가된다.
NPM Scripts
package.json에 있는 scripts에 parcel 번들링 명령어를 작성하면 parcel을 편리하게 사용할 수 있다.
npm run {명명한 스크립트 이름} 명령어로 스크립트를 실행할 수 있다.
parcel build 명령어를 실행하면 번들링이 진행되어 index.html 파일이 압축되는 것을 볼 수 있다.
Babel과 Polyfilling
ES5 이전 JS만 지원하는 브라우저 등에서 모던 JS 코드를 정상적으로 동작하게 하려면 transpile과 polyfill이 필요하다고 배웠다.
parcel을 사용할 경우 Babel을 활용한 transpile 작업이 자동으로 진행된다.
하지만 일부 feature의 경우 자동으로 변환되지 않는 코드가 있을 수 있다. 일반적으로 단순히 syntax에 관한 새로운 기능이면 변환이 잘 되지만(const -> var) find 메소드나 Promise와 같은 기능은 transpile이 불가능하다. 이러한 기능은 Polyfill로 해결해야한다.