새소식

반응형
JavaScript/React

react create-react-app 프로젝트 생성 시 구조

  • -
반응형

react 프로젝트 생성을 위해 "npx create-react-app 프로젝트명" 명령어를 사용해 생성했다.

 

생성된 폴더 구조는 아래와 같다.

 

해당 구조를 알기 전에 NPM(Node Package Manager) 에 대해 알아야한다.

 

npm 은 node.js 를 위한 패키지 관리 매니저이자 node.js 를 위한 오픈소스 생태계이다.

npm 은 node.js 에서 사용하는 모듈들을 패키지로 만들어 의존성, 필요한 라이브러리 등

관리해준다.

 

 

package.json 파일은 프로젝트 라이브러리 버전 및 의존성을 관리하기 위한 JSON 파일이다.

기본적으로 "npm init" 명령어를 통해 생성할 수 있다.

 

// package.json { "name": "react_test", "version": "0.1.0", "private": true, "dependencies": { "@testing-library/jest-dom": "^5.17.0", "@testing-library/react": "^13.4.0", "@testing-library/user-event": "^13.5.0", "react": "^18.2.0", "react-dom": "^18.2.0", "react-scripts": "5.0.1", "web-vitals": "^2.1.4" }, "scripts": { "start": "react-scripts start", "build": "react-scripts build", "test": "react-scripts test", "eject": "react-scripts eject" }, "eslintConfig": { "extends": [ "react-app", "react-app/jest" ] }, "browserslist": { "production": [ ">0.2%", "not dead", "not op_mini all" ], "development": [ "last 1 chrome version", "last 1 firefox version", "last 1 safari version" ] } }

 

 

name

패키지의 이름이며, 이름에는 규칙이 있다.

  • 소문자로 작성되어야 한다.
  • 한단어로 작성되어야 한다.
  • -(하이픈) 이나 _(언더스코어)를 포함할 수 있다.

 

version

패키지의 버전을 나타낸다.

 

private

private 필드는 해당 프로젝트가 npm 패키지 저장소로 발행해도 되는지 여부를 지정하기 위해 사용된다.

기본값은 false 이며 true일 경우 npm 패키지 저장소로 업로도 되는 사고가 발생할 수 있다.

 

description

패키지에 대한 설명이다. 사람들이 해당 프로젝트를 봤을 때 이해할 수 있도록 도움을 준다.

 

 

scripts

프로젝트에서 사용해야 하는 작업을 스크립트로 등록해놓기 위해서 사용된다.

"npm run 스크립트명" 으로 실행하며 주로 쓰이는 npm run start, npm un build 등이 정의된다.

 

 

dependencies && devDenpendencies

프로젝트에 필요한 모듈들과 정의된 모듈에 필요한 라이브러리들을 관리하기 위한 필드이다.

해당 프로젝트가 구동되기 위해선 어떤 라이브러리들이 필요한지 정의되어 있으며,

"npm install 라이브러리명 --save" 명령어를 통해 라이브러리를 다운받을 수 있다.

--save 를 통해 dependencies 에 저장할 수 있다.

 

dependencies 와 devDenpendencies 의 기본적 작성법은 같으며, 큰 차이점은

dev가 붙은것처럼 개발시에만 사용될 라이브러리만 저장하기 위해 사용된다.

운영 시 필요한 라이브러리들은 dependencies 에 저장하면 되고 

개발 시 필요한 라이브러리들은 devDependencies 에 저장한다.

 

devDependencies 의 사용방법은 "npm install 라이브러리명 --save-dev" 로 사용한다.

--save 와 --save-dev 의 차이다.

 

 

package.json 의 dependencies나 devDependencies 에 명시된 의존성 패키지들의

히스토리를 관리해주는 파일이다.

 

보통 패키지의 버전은 [Major].[Minor].[Patch] 와 같은 방식으로 정의된다.

 

해당 패키지에 1.0.0 이라는 버전의 패키지가 설정되어 있더라도 Minor 와 Patch 는 언제든지

업데이트 될 수 있다.

package.json 의 dependencies 에 1.0.0 으로 설정되어 있더라도 1.1.0 이나 1.0.1 과 같은

업데이트된 버전이 설치될 가능성이 있다.

이러한 경우 여러 개발자들의 다른 개발환경에 예기치 못한 오류가 발생할 수 있다.

이때 필요한게 package-lock.json 파일이다. package.json 의 버전이 바뀌더라도

package-lock.json 파일이 작성된 시점의 의존성 트리가 다시 생성될 수 있게끔

보장하는것이다.

 

 

해당 프로젝트에 필요한 라이브러리들을 설치하면 node_modules 에 다운로드 된다.

특정 경로를 지정하지 않고 외부 모듈을 import 하게 되면 node_modules 에서 찾는다.

 

 

index.html 과 index.html 에서 사용될 "정적 파일"들이 위치하는 곳이다.

 

 

브라우저에 표출되는 파일이다.

public/index.html 파일은 index.html 이라는 이름을 사용해야 한다. 변경을 하려면 따로 서버 설정이 필요하다.

public/ 폴더 내의 파일들은 public/index.html 에서만 사용할 수 있다.

<html> ... <body> <noscript>You need to enable JavaScript to run this app.</noscript> <div id="root"></div> </body> </html>

 

 

웹앱 메타데이터입니다. 화면에서 보여지는 앱 이름, 아이콘, 디스플레이 유형 등 설정할 수 있다.

 

웹 크롤러를 위한 정보입니다.

disallow 옵션에 특정 URL 을 추가하면 공개적으로 사용할 수 있지만 검색 엔진에는 인덱싱되지 않는다.

 

 

src/ 내부에 위치한 파일들은 webpack에 의해 재빌드된다. src/ 파일 외부에 위치하는 JS, CSS 파일들은

webpack 이 찾을 수 없으므로 빌드에 필요한 파일들은 src/ 내부에 위치시킨다.

 

public/index.html 파일과 같이 src/index.js 는 해당 이름으로만 사용 해야하며, 변경 시 설정파일 변경이 필요하다.

 

import React from 'react'; import ReactDOM from 'react-dom/client'; import './index.css'; import App from './App'; import reportWebVitals from './reportWebVitals'; const root = ReactDOM.createRoot(document.getElementById('root')); root.render( <React.StrictMode> <App /> </React.StrictMode> ); reportWebVitals();

 


import React from 'react';
import ReactDOM from 'react-dom/client';
import './index.css';
import App from './App';
import reportWebVitals from './reportWebVitals';

 

ES16 에서 새롭게 나온 import 키워드를 통해 외부 라이브러리 모듈을 불러온다.

 

 


const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
    <React.StrictMode>   
    <App /> 
    </React.StrictMode>
);

 

우리가 개발하는 src/ 경로의 파일들을 index.js 의 ReactDOM 이 public/index.html 파일 내

id 가 root인 태그안에 랜더링 한다.

실제적으로 index.html 파일이 사용자에게 배포되고 보여지는 파일이다.

 

 

<App /> 태그를 통해 랜더링 시킨 Root 가 되는 React 컴포넌트이다.

import logo from './logo.svg'; import './App.css'; function App() { return ( <div className="App"> <header className="App-header"> <img src={logo} className="App-logo" alt="logo" /> <p> Edit <code>src/App.js</code> and save to reload. </p> <a className="App-link" href="https://reactjs.org" target="_blank" rel="noopener noreferrer" > Learn React </a> </header> </div> ); } export default App;

 

export 키워드를 통해 App 이라는 함수를 외부로 내보내기했다.

 

반응형

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.