npm init
package.json 생성
npm install react react-dom
yarn add react react-dom
react : React Library
react-dom : browser, dom, webapp 관리
npm install --save-dev @babel/core babel-loader @babel/preset-react @babel/preset-env
yarn add --dev @babel/core babel-loader @babel/preset-react @babel/preset-env
npm install --save-dev webpack webpack-dev-server webpack-cli html-webpack-plugin
--save-dev : 개발환경에서만 사용되는 라이브러리라는 것을 명시
webpack.config.js
const path = require('path') // core nodejs 모듈 중 하나, 파일 경로 설정할 때 사용
const HtmlWebpackPlugin = require('html-webpack-plugin') // index.html 파일을 dist 폴더에 index_bundle.js 파일과 함께 자동으로 생성
module.exports = { // moduel export
entry: './src/index.js', // 리액트 파일이 시작하는 곳
output: { // bundled compiled 파일
path: path.join(__dirname, '/dist'), //__dirname : 현재 디렉토리, dist 폴더에 모든 컴파일된 하나의 번들파일을 넣을 예정
filename: 'index_bundle.js'
},
module: { // javascript 모듈을 생성할 규칙을 지정 (node_module을 제외한.js 파일을 babel-loader로 불러와 모듈을 생성
rules: [
{
test: /\.js$/, // .js, .jsx로 끝나는 babel이 컴파일하게 할 모든 파일
exclude: /node_module/, // node module 폴더는 babel 컴파일에서 제외
use:{
loader: 'babel-loader' // babel loader가 파이프를 통해 js 코드를 불러옴
}
}
]
},
plugins: [
new HtmlWebpackPlugin({
template: './src/index.html' // 생성한 템플릿 파일
})
]
}
webpack.config.js
const HtmlWebpackPlugin = require('html-webpack-plugin')
module.exports = {
entry: 'index.js',
output: {
path: __dirname + '/dist',
filename: 'index_bundle.js'
},
plugins: [
new HtmlWebpackPlugin()
]
}
위의 코드는 다음과 같이 dist/index.html파일을 생성한다.
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Webpack App</title>
</head>
<body>
<script src="index_bundle.js"></script>
</body>
</html>
index_bundle.js가 webpack에 의해 컴파일, 번들화된 하나의 js 파일이다.
웹페이지의 가장 기본이 될 index.html 파일을 src/index.html 경로로 아래와 같이 생성한다.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>My React App</title>
</head>
<body>
<div id="app"></div> // 템플릿
</body>
</html>
{
"presets": [
"@babel/env",
"@babel/react"
]
}
@babel이 버전이 업데이트 되면서 더이상 babel-core 형태(-)의 dependency를 지원하지 않게되므로서 @babel/env 형태(/)를 사용해야 한다.
import React from 'react';
import ReactDOM from 'react-dome';
import App from './component/App'
ReactDOM.render(<App/>, document.getElementById('app')) // dom에 render학 메인 app component, rendering 할 곳
import React from 'react'
export default class App extends React.Component {
render(){
return(
<div>
<h1>My React App</h1>
</div>
)
}
}
"scripts": {
"start":"webpack-dev-server --mode development --open --hot", // webpack-dev-server, --open : 자동으로 브라우저 열어준다, --hot : hot realod 저장했을 때 자동적으로 reload 해준다
"build":"webpack --mode production" // dist 폴더에 컴파일된 파일 다 넣어준다
},