Facebook에서 제공하는 CLI 툴
*CLI : Command Line Interface. 키보드를 이용해 운영체제와 상호작용하는 소프트웨어 매커니즘
HTML, Javascript, CSS, image와 같은 자원들의 의존성을 관리/모아야하고,
ES6 이후 문법이나 JSX같은 문법들을 구식 브라우저에서도 사용할 수 있어야 한다.
→ Webpack을 이용해 자원들을 번들링하고 Babel을 이용해 코드를 트랜스파일링 하고 ReactDOM을 이용해 DOM에 접근하는 모든 과정은 어렵고 자잘한 환경 설정이 필요하다.
이것을 명령어 한번에 설정할 수 있다면 편리하지 않을까?
모듈 번들러
자바스크립트 컴파일러
일반적으로 ES6 이후 문법(화살표 함수, 클래스, 스프레드 문법 등) 코드를 상응하는 과거 버전의 코드로 변경해줘서(트랜스파일링), 이전 환경의 브라우저에서도 코드가 동작하도록 변환해주는 도구.
npm init
npm install react react-dom
npm install --save-dev @babel/core @babel/preset-env @babel/preset-react babel-loader
npm install --save-dev webpack webpack-cli webpack-dev-server html-webpack-plugin
const HtmlWebpackPlugin = require('html-webpack-plugin');
const path = require('path');
module.exports = {
entry: './src/index.js',
output: {
path: path.resolve(__dirname, 'dist'),
filename: 'bundle.js'
},
module: {
rules: [
{
test: /\.(js|jsx)$/,
exclude: /node_modules/,
use: {
loader: 'babel-loader'
}
}
]
},
plugins: [
new HtmlWebpackPlugin({
template: './public/index.html'
})
],
devServer: {
static: './dist'
}
};
// .babelrc 파일
{
"presets": ["@babel/preset-env", "@babel/preset-react"]
}
import React from "react";
import { createRoot } from "react-dom/client";
const App = () => <h1>Hello from</h1>;
const root = document.getElementById("app");
createRoot(root).render(<App />);
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>React App</title>
</head>
<body>
<div id="app"></div>
</body>
</html>
{
...
"scripts": {
"start": "webpack serve --open --mode development",
"build": "webpack --mode production"
},
...
}
이렇게 복잡한 과정을 npx create-react-app project-name 또는 yarn create react-app project-name 명령어 한번에 설정할 수 있다