생명주기 중에 한번만 리소스를 로딩하는 SPA의 렌더링 방식은 생산성과 성능에 장점이 많은 렌더링 방식입니다. 하지만 항상 좋은 점만 있는것이 아니고 프로그램 특징에 맞게 그에 맞는 선택을 하는게 중요하다고 생각합니다.
npm init package.json 생성 의존성 초기화
npm install 패키지 설치
-S : dependencies package
-D : devDependencies package (개발용)
-g : global package
npm update 패키지 업데이트
npm start package.json의 scripts에 있는 start 실행,
start 가 없으면 node server.js 실행
npm run `script명령어` package.json의 scripts에 있는 명령어 실행
- 패키지가 경로에 있는지 확인
- 경로에 있으면 실행
- 없으면 설치 후 실행
Create-React-App 을 npm install
하게되면, 생성된 프로젝트는 기본적으로 웹팩 및 바벨 설정 등이 숨겨져 있습니다. 상세한 설정과 패키지 구성을 보기위해
npm run eject
를 실행합니다.
다음과 같이 굉장히 길고 많은 웹팩 설정 등 과 패키지를 포함하고 있다는 것을 볼 수 있습니다. 그만큼 처음 React 를 사용하는데 편리함을 제공하지만 한편으로는 사용하지 않는 기능 또한 모두 포함되어 있을 것입니다.
Webpack이 자바스크립트 파일을 번들링하기 전에 Babel을 로드하여 ES6+ 코드를 ES5 코드로 트랜스파일링합니다.
$ npm i react react-dom
$ npm i -D webpack webpack-cli webpack-dev-server
$ npm i -D @babel/core @babel/preset-env @babel/preset-react babel-loader
// 브라우저에서 실행되는 시점에 필요한 기능을 주입합니다.
$ npm i -D babel-polifill
// 수정 후에도 Application의 상태가 사라지지 않게 도와줍니다. (Hot-reloading)
$ npm i -D react-reloading
$ npm i -D @pmmmwh/react-refresh-webpack-plugin
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF=8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>금오공과대학교 금테코</title>
</head>
<body>
<div id="root"></div>
<!-- Webpack 실행 후 생성되는 파일 위치입니다. -->
<script src="./dist/app.js"></script>
</body>
</html>
import React from 'react';
import ReactDom from 'react-dom';
import { App } from './App';
ReactDom.render(
<BrowserRouter>
<App />
</BrowserRouter>, document.querySelector('#root'));
import React from 'react';
const App = () => {
return (
<div>app</div>
);
};
export default App;
const path = require('path'); // core nodejs 모듈 중 하나, 파일 경로 설정할 때 사용
const RefreshWebpackPlug = require('pmmmwh/react-refresh-webpack-plugin');
module.exports = {
mode: 'development',
resolve: { // 확장자를 생략하게 만들어줍니다.
extensions: ['.js', '.jsx'],
}
entry: { // 리액트 파일이 시작하는 곳
app: ['babel-polyfill'./src/index.js'],
}
module: {
rules: [
{
test: /\.jsx?/,
loader: 'babel-loader',
options: {
// ...
}
}
]
},
plugin: [
new RefreshWebpackPlug()
]
output: {
path: path.join(__dirname, 'dist'),
filename: 'app.js',
publicPath: '/dist/'
},
}
webpack build
결과를 보기 위해선 RefreshWebpackPlug()
를 빼면됩니다.
webpack-dev-server
가 웹팩5 버전에서는 webpack serve
로 변경되었습니다.node_modules
src
ㄴindex.jsx
ㄴApp.jsx
index.html
package.json
webpack.config.js