React에서 여러 항목의 공통 구성 요소를 처리하는 방법 [create-react-ap]

TL;DR

  • 리액트에 Atomic Design 등을 적용해 재활용성을 추가하면서 구성 요소를 만들고, 여러 프로젝트에서 공통의 구성 요소를 사용하려는 경우도 있다.(e.g.User用와 Admin用는 다른 프로젝트로 제작, 공동 구성 요소 처리 등)

  • create-react-app 프로젝트를 시작하는 경우 기본 설정이 어렵기 때문에 거스를 수 없는 조작yarn eject(ornpm run eject을 통해 수동으로 설정합니다.

  • Pros & Cons


    Pros

  • create-react-app의 은혜(간단하게 구축 가능)
  • 핫 로딩이 가능하므로 공동 구성 요소를 폭발 속도로 수정할 수 있음
  • Cons

  • monorepo로 구성되어 있어 코드를 처음 본 사람에게는 위압적
  • 여러 프로젝트가 동일package.json에서 관리되므로 여러 프로젝트에서 동일한 패키지를 사용할 때 버전 일치
  • 가 필요합니다.

  • 진행npm run eject하기 때문에create-react-app 버전 업그레이드를 따라갈 수 없음
  • 메서드

  • yarn eject

  • 편집config/paths.js
  • src/, 수정public/의 디렉터리 구조

  • 편집package.json
  • 전제 조건


    create-react-app ( ver1.3.1 )
    샘플(Giithub)
    commit

    1. yarn eject

    $ yarn eject
    
    주의: 이 명령을 실행하면 (git 작업 이외에는) 취소할 수 없습니다

    2. config/paths.js 편집


    paths.js
     ~ 省略 ~ 
    // デフォルトは'user' 
    const ENTRY_NAME = process.env.ENTRY_NAME || 'user' //追加
    
    module.exports = {
      dotenv: resolveApp('.env'),
      appPath: resolveApp('.'),
      appBuild: resolveApp('build/' + ENTRY_NAME),                      //
      appPublic: resolveApp('public/' + ENTRY_NAME),                    //
      appHtml: resolveApp(`public/${ENTRY_NAME}/index.html`),           //  編集
      appIndexJs: resolveModule(resolveApp, `src/${ENTRY_NAME}/index`), //  
      appPackageJson: resolveApp('package.json'),
      appSrc: resolveApp('src'),
      appTsConfig: resolveApp('tsconfig.json'),
      yarnLockFile: resolveApp('yarn.lock'),
      testsSetup: resolveModule(resolveApp, 'src/setupTests'),
      proxySetup: resolveApp('src/setupProxy.js'),
      appNodeModules: resolveApp('node_modules'),
      publicUrl: getPublicUrl(resolveApp('package.json')),
      servedPath: getServedPath(resolveApp('package.json')),
    };
    
    
    

    3. src/,public/의 디렉터리 구조 수정

    config
    scripts
    public
      index.html
      favicon.ico
      manifest.json
    src
      index.js
      index.css
    package.json
    
    ↓
    config
    scripts
    public
      admin
        index.html
        favicon.ico
        manifest.json
       user  
        index.html
        favicon.ico
        manifest.json
    src
      admin
        index.js
        index.css
      user
        index.js
        index.css
      shared
        MySharedComponent.jsx
    package.json
    

    4. package.json 편집


    package.json
      "scripts": {
        "start": "node scripts/start.js",
        "build": "node scripts/build.js",
        "test": "node scripts/test.js",
        "start:admin": "ENTRY_NAME='admin' node scripts/start.js",
        "build:admin": "ENTRY_NAME='admin' node scripts/build.js",
        "test:admin": "ENTRY_NAME='admin' node scripts/test.js"
      },
    

    좋은 웹페이지 즐겨찾기