Parcel bundler
는 중소규모 프로젝트에 사용하기 좋은 간편한 번들러다.
// package.json
"scripts": {
"dev": "parcel index.html", // 개발 서버
"build": "parcel build index.html" // 빌드
},
scss 파일을 html에 연결하면 자동으로 sass 패키지가 설치가 되고 빌드 되어 자연스럽게 사용할 수 있다.
parcel 번들러는 개발서버 작동시 dist 폴더를 생성하여 dist 폴더 기준으로 화면을 띄우는데, 이미지들이 들어가는 images
폴더 같은 경우 자동으로 dist 폴더로 옮겨준다.
이미지 파일들을 images
폴더에 넣으면 자동으로 파일명이 암호화?(키값이 붙어서) 되어 연결된다.`
해당 플러그인은 정적 파일을 넣어놓는 폴더를 지정하는 기능을 한다.
( favicon.ico 같은 기타 파일들.. )
$ npm i -D parcel-plugin-static-files-copy
parcel 번들러는 images 폴더를 제외한 static한 파일을 빌드에 포함시키기 위해선 해당 패키지를 설치하고 아래와 같이 package.json
에 설정을 해줘야 한다.
간단하게 staticPath
옵션만 써도 되고, 폴더명을 지정할 수 있다.
옵션 작성 안할시 default 폴더명은 static
이다.
// package.json
{
"staticFiles": {
"staticPath": "static"
}
}
postcss
는 css
의 후처리
옵션을 설정하게 해주는 기능이다.autoprefixer
는 postcss
에서 처리할 수 있는 많은 기능들 중 하나이고, 브라우저 벤더사들의 벤더프리픽스를 자동으로 붙여주는 기능이다.$ npm i -D postcss autoprefixer
필수
옵션이다.// package.json
{
"browserslist": [
"> 1%", // 전세계 점유율 1% 이상인 모든 브라우저
"last 2 versions" // 해당 브라우저의 마지막 2개 버전까지 지원 하겠다는 설정
]
}
.postcssrc.js
).postcssrc.js
파일 또는 postcss.config.js
파일에 작성한다.autoprefixer
플러그인을 연결해준다.// .postcssrc.js
module.exports = {
plugins: [
require('autoprefixer')
]
}
postcss
를 사용할 때 autoprefixer
와 버전 차이가 많이 나면 에러가 발생할 수 있다. 그럴 땐 autoprefixer
의 버전을 한단계 낮춰서 재설치 하면 해결된다.
예를 들어 postcss는
8버전이고, autoprefixer
는 10버전일 경우 에러가 발생하여 아래와 같이 9
버전으로 재설치 하여 해결
$ npm i -D autoprefixer@9
@babel/core
와 @babel/preset-env
을 개발 의존성으로 같이 설치해 준다.$ npm i -D @babel/core @babel/preset-env
.babelrc.js
)우선 기본 작동을 위해 .babelrc.js
파일을 생성하고 preset을 연결한다.
사실 @babel/core는 별 다른 기능이 없다. 각종 es6의 각 기능들을 의존성 모듈로 설치해서 사용해야 하는데 그걸 모두 모아놓은 것이 preset 이다. 그래서 babel에서 공식적으로 제공해주는 @babel/preset-env를 설치하여 es6를 지원할 수 있다.
하지만 아래에 자세히 작성하겠지만 오래된 레거시 브라우저를 제외한 모던 브라우저에서는 좀 더 가벼운 코드로 지원할 수 있도록 브라우저 지원 범위를 설정해줘야 정상 작동한다.
// .babelrc.js
module.exports = {
presets: ['@babel/preset-env']
}
postcss
처럼 browserslist
설정이 필요하다.
이미 package.json
에 작성했다면 이 과정은 패스하면 된다.
오래된 브라우저들을 위해 변환된 코드들은 코드량이 너무 많아서 용량이 커지기 때문에, 브라우저 지원 범위를 지정해서 비교적 최신 브라우저에서는 좀 더 가벼운 코드를 사용하도록 파일 용량을 최적화 시키기 위해 browserslist
옵션을 사용한다.
// package.json
{
"browserslist": [
"> 1%", // 전세계 점유율 1% 이상인 모든 브라우저
"last 2 versions" // 해당 브라우저의 마지막 2개 버전까지 지원 하겠다는 설정
]
}
$ npm i -D @babel/plugin-transform-runtime
@babel/plugin-transform-runtime
설치가 필요하다.// .babelrc.js
module.exports = {
presets: ['@babel/preset-env'],
plugins: [
['@babel/plugin-transform-runtime']
]
}