> Week 8. ๋๋์ด babel, postcss ๋ฐฐ์ด๋น!!!! ๐คฉ
ES5 ์ด์์ ๋ฒ์ ์ ๊ตฌํ ๋ธ๋ผ์ฐ์ ์์ ๋์ํ ์ ์๋๋ก ๋ฎ์ถ๋๋ฐ ์ฌ์ฉ๋๋ transcompiler
โ ๏ธ Babel์ด ์๋ ๊ธฐ๋ฅ์ ์๋ก ๋ง๋ค์ด์ฃผ์ง๋ ์์
npm i -D @babel/core @babel/cli
@babel/core
: ๋ฐ๋ฒจ์ ์ฝ์ด ํจํค์ง ๐๐ป ๊ฒฐ๊ณผ๋ฌผ๋ง ๋ด์ฃผ์ง ๋ณํํด์ฃผ์ง ์์@babel/cli
: ํฐ๋ฏธ๋์์ ๋ช
๋ น์ ์คํํ ์ ์๋ ํจํค์งwebpack-cli
๊ฐ ์์ ๊ฒฝ์ฐ ์ค์น ์ํด๋ ๋จ"scripts": {
"babel": "babel main.js --out-dir dist" // ์ง์
์ ๐๐ป ๊ฒฐ๊ณผ
},
ํ๋ฌ๊ทธ์ธ|ํ๋ฆฌ์
์ ํจํค์ง๋ฅผ ๋ฑ๋กํด์ผ ์ด๋ฃจ์ด์ง!๋๊ทผ๋๊ทผ ๐
{
"presets": ["@babel/preset-env"], // ๋ณํ์ ํด์ฃผ์ง๋ง ์ ์ญ์ค์ผ ๊ฐ๋ฅ์ฑ
"plugins": [
[
"@babel/plugin-transform-runtime", // ์ ์ญ์ค์ผ ๋ฐฉ์ง. ์ฌ์ฉ๋๋ ๋ฌธ๋ฒ๋ง ๋ณํ
{
// ์ต์
corejs: 3
}
]
]
}
npm i -D @babel/preset-env
package๋ก ํ๋ํ๋ ์ค์นํ์ง ์๊ณ , presets์ธ ํตํฉ ํจํค์ง๋ก ์ค์น
babel์ corejs
๋ฅผ ํตํด ๋ณํํ๋๋ฐ
default์ธ 2๋ฒ์ ๋ง๊ณ 3๋ฒ์ ์ผ๋ก ๋ฐ๊พธ๋ฉด ๋ ๋ง์ด ์ธ์ํด ๋ณํํ ์ ์์.
npm i -D @babel/runtime-corejs3
npm i -D @babel/plugin-transform-runtime
webpack์์ ์ธ๊ฑฐ๋ฉด loader๋ ๋ค์ด๋ก๋
npm i -D babel-loader
package.json
์ ํ๋ก์ ํธ์์ ์ง์ํ ๋ธ๋ผ์ฐ์ ๋ฒ์ ๋ช
์
// package.json
"browerslist": [
"> 1%", // ๊ธ๋ก๋ฒ ๋ธ๋ผ์ฐ์ ์ ์ ์จ 1% ์ด์
"last 2 versions", // ํด๋น ๋ธ๋ผ์ฐ์ ์ ๋ง์ง๋ง 2๊ฐ๋ฒ์ ๋ง
"not dead", // ์์ง ๊ตฌ๋๋๋ ๋ธ๋ผ์ฐ์
"ie >= 11" // ie๋ 11 ์ด์๋ง
]
webpack.config ํ์ผ์ babel-loader
๋ฅผ ๋ฑ๋กํด์ค์ผ ํจ.
module.exports = {
module: {
rules: [
{
test: /\.js$/,
// exclude: /node_modules\/(?!axios)/, // axios๋ฅผ ์ ์ธํ node_modules ๋ณํ ์ํจ
exclude: /node_modules\/(?!(axios|xxxx|xxxx))/, // ์ ์ธํ ๋์ ๋ณต์ ๋ฑ๋ก
use: 'babel-loader'
}
}
PostCSS๊ฐ ๋ญ๊น? ๐ง
๋น๊ต์ ์ต์ ๋ฌธ๋ฒ์ ํ์ฒ๋ฆฌํ์ฌ ๊ธฐ๋ฅ์ ์ถ๊ฐํ๋ ํ์ฒ๋ฆฌ๋๊ตฌ.
vender-prefixer๋ฅผ ์๋์ผ๋ก ๋ถ์ฌ์ฃผ๋ ํจํค์ง
npm i -D postcss autoprefixer postcss-loader
postcss
: postcss ๊ธฐ๋ณธ ํจํค์ง ๐๐ป ๊ฒฐ๊ณผ๋ฌผ๋ง ๋ด์ฃผ์ง ๋ณํํด์ฃผ์ง ์์autoprefixer
: ์ค์ ๋ก ๋ณํํด์ฃผ๋ ํจํค์งpostcss-loader
: ์นํฉ๊ณผ ์ฐ๊ฒฐmodule.exports = {
plugins: [
require('autoprefixer')
]
}
webpack.config ํ์ผ์ postcss-loader
๋ฅผ ๋ฑ๋กํด์ค์ผ ํจ.
module.exports = {
module: {
rules: [
{
test: /\.s?css$/,
use: [ // ๋จผ์ ํด์์ด ํ์ํ ๋ก๋๋ฅผ ๋์ค์ ์์ฑ
'vue-style-loader',
'css-loader', // css loader ํด์ค
'postcss-loader', // css ํ์ฒ๋ฆฌ๋ก ํ๋ฆฌํฝ์ ๋ถ์ฌ์ฃผ๊ณ
'sass-loader' // sass ์ ์ฒ๋ฆฌ ๋๊ตฌ๋ก css๋ฅผ ๋ง๋ค๊ณ
]
}
}
}
Babel
์ ๊ตฌํ ๋ธ๋ผ์ฐ์ ์์๋ ๋์ํ๋๋ก JS ๋ฒ์ ์ ๋ค์ด์ํค๋ transcompiler,
Webpack
์ ์ฌ๋ฌ ํ์ผ๋ค์ ํ๋๋ก ํตํฉ์์ผ์ฃผ๋ bundler,
postcss
๋ ์ต์ ๋ฌธ๋ฒ๋ค์ ์ฌ๋ฌ ๋ธ๋ผ์ฐ์ ์์ ์ฌ์ฉํ๋๋ก ๊ธฐ๋ฅ์ ์ถ๊ฐํด์ฃผ๋ postProcessor
๋ก ๊ฐ๋จํ ์ ๋ฆฌํ ์ ์์ ๊ฒ ๊ฐ๋ค!
๋ค๋ฅธ ๊ฒ๋ค๋ ์์ฒญ๋๊ฒ ์ ์ฉํ์ง๋ง ํนํ๋ postcss,
css๋ฐฐ์ฐ๋ฉด์ vender-prefixer ๋ถ์ด๋ ๊ฒ ์ฐธ ๊ท์ฐฎ๋ค ์๊ฐํ์๋๋ฐ
์ด๋ ๊ฒ ์ ์ฉํ ์น๊ตฌ๊ฐ ์์๊ตฌ๋ ๐ ํ๊ณ ๊ฐํํ๋ค