모노레포 도입기 - 2. 모노레포 도입 후 프로젝트 초기 세팅 과정 (with TypeScript, Eslint, Prettier)

Dahee Kim·2022년 5월 26일
6

모노레포 도입기

목록 보기
2/3

모노레포 도입기

오늘은 지난 글에 이어 모노레포를 도입하고, 프로젝트를 초기 세팅한 과정에 대해서 간략히 소개하겠습니다.

yarn berry workspace

  1. yarn 설치
    npm에서 최신 버전의 yarn을 내려받아주세요.
$ npm install -g yarn
  1. yarn berry 설정
    yarn 버전을 berry로 설정해주세요.
$ yarn set version berry
  1. yarn init
    yarn init으로 package.json 파일을 만들어줍니다.
$ yarn init
  1. workspace 세팅
    package.json 파일을 설정해줍니다. 저는 루트 경로의 /packages 폴더 내부의 모든 폴더가 workspace에 속하도록 만들었습니다.
{
  "name": "monorepo",
  "private": true,
  "workspaces": {
  	[
      "packages/*"
  	],
  },
  "packageManager": "yarn@3.0.2"
}

typescript

  1. typescript 설치
$ yarn add -D typescript
  1. node, react, jest를 위한 typescript 모듈 설치
$ yarn add -D @types/node @types/react @types/jest
  1. tsconfig.json 파일 구성
{
    "compilerOptions": {
      "allowSyntheticDefaultImports": true,
      "moduleResolution": "Node",
      "resolveJsonModule": true,
      "esModuleInterop": true,
      "strict": true,
      "target": "es6",
      "lib": ["ES5", "ES6", "ESNext", "DOM"],
      "skipLibCheck": true,
      "baseUrl": ".",
      "forceConsistentCasingInFileNames": true,
      "module": "esnext",
      "isolatedModules": true
    },
    /* // 각 프로젝트에 오버라이드할 tsconfig 파일이 있다면 추가
    "references": [
      { 
        "path": "packages/common-components"
      },
      {
        "path": "packages/common-styles"
      },
      {
        "path": "packages/common-utils"
      },
    ],
    */
    "exclude": ["packages/**/dist/**"],
}

eslint

  1. eslint 설치
$ yarn add -D eslint
  1. eslint init하고, 프로젝트 성격에 맞게 옵션 선택.
$ npx eslint --init
  1. yarn을 사용하는 경우 아래 질문에서 NO 선택.
The config that you've selected requires the following dependencies:

eslint-plugin-react@latest @typescript-eslint/eslint-plugin@latest @typescript-eslint/parser@latest
? Would you like to install them now with npm? ‣ No / Yes
  1. 위 항목 복사해 와서 yarn으로 설치
yarn add -D eslint-plugin-react @typescript-eslint/eslint-plugin @typescript-eslint/parser
  1. eslintrc 파일 구성
{
    "env": {
        "browser": true,
        "es2021": true,
        "jest": true
    },
    "extends": [
        "airbnb",
        "prettier"
    ],
    "parser": "@typescript-eslint/parser",
    "parserOptions": {
        "ecmaFeatures": {
            "jsx": true
        },
        "ecmaVersion": "latest",
        "sourceType": "module"
    },
    "plugins": [
        "react",
        "react-hooks",
        "prettier",
        "@emotion",
        "jest",
        "jest-dom"
    ],
    "rules": {
        "prettier/prettier": "error",
    },
    "settings": {
        "import/resolver": {
          "typescript": {}
        }
    }
}

prettier

  1. prettier 설치
$ yarn add -D prettier
  1. eslint와 충돌을 막아주는 config, plugin 설치
$ yarn add -D eslint-config-prettier eslint-plugin-prettier
  1. .prettierrc 파일 구성
{
    "arrowParens": "always",
    "bracketSameLine": true,
    "bracketSpacing": true,
    "embeddedLanguageFormatting": "auto",
    "endOfLine": "lf",
    "htmlWhitespaceSensitivity": "css",
    "insertPragma": false,
    "jsxSingleQuote": false,
    "printWidth": 80,
    "proseWrap": "preserve",
    "quoteProps": "as-needed",
    "requirePragma": false,
    "semi": false,
    
    "singleQuote": true,
    "tabWidth": 2,
    "trailingComma": "none",
        "useTabs": false,
    "vueIndentScriptAndStyle": false,
    "disableLanguages": []
}

ZipFS 설치 및 에디터 설정

https://yarnpkg.com/getting-started/editor-sdks#vscode

typescript, eslint, prettier를 사용할 때 yarn berry를 사용하면 PnP 사용 때문에 해당 모듈을 찾지 못하는 경우가 있다. 그러므로 아래 작업을 진행한다.

이 작업은 위의 모듈을 모두 설치한 다음에 진행해야한다.

  • vscode extension ZipFS 설치.
  1. 아래 명령 실행
$ yarn dlx @yarnpkg/sdks vscode
  1. typescript 파일에서 ctrl + shift + p 누르기

  2. "Select TypeScript Version" 선택하기

  3. "Use Workspace Version" 선택하기

마무리

다음편에서는 /packages에 components를 위한 workspace(with react, storybook, emotion)를 구축하는 과정을 소개하겠습니다.

참고자료

우아한형제들 기술블로그 - Yarn berry workspace를 활용한 프론트엔드 모노레포 구축기
https://techblog.woowahan.com/7976/

monorepo template 깃허브
https://github.com/kowoohyuk/monorepo-template

emotion 공식문서
https://emotion.sh/docs/@emotion/eslint-plugin

Yarn 공식문서 - Editor SDKs
https://yarnpkg.com/getting-started/editor-sdks#vscode

profile
하루가 너무 짧아~

0개의 댓글