Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Feat] PNPM + Turborepo를 통한 모노레포 환경 구성 #3

Merged
merged 17 commits into from
Oct 29, 2024

Conversation

seoko97
Copy link
Collaborator

@seoko97 seoko97 commented Oct 29, 2024

관련 이슈 번호

close #2

작업 내용

  • 모노레포 초기 설정
  • 공통 eslint, prettier rule 설정
  • 공통 tsconfig 설정

PR 포인트

  • eslint rule
  • husky
  • turborepo: 현재 가장 기본적인 설정만 진행되었습니다. 추후 기술스택에 따라 설정을 진행할 에정입니다.

고민과 학습내용

Eslint

현재 설정되어 있는 eslint rule은 다음과 같습니다.

  1. typescript 기본 설정
  2. import 순서 설정
  3. naming convention

import 순서에 경우 다음과 같은 순서로 설정되었습니다.

  1. node 내장 모듈
  2. 설치된 의존성 모듈
  3. 워크스페이스 모듈
  4. 현재 워크스페이스에서 설정된 절대 경로
  5. 상대 경로
  6. 타입
import path from 'path';

import zod from 'zod';
import test1 from '@repo/shards';

import test2 from '@/';

import test3 from './';

import type { Test } from './';

파일 저장시 자동으로 해당 경로로 변경되며 만약 순서가 잘못되었다면 오류가 발생합니다.

//`path` import should occur before import of `zod`
import zod from 'zod';
import path from 'path';

import test1 from '@repo/shards';

import test2 from '@/';

import test3 from './';

import type { Test } from './';

naming convention에 경우 다음과 같습니다.

  1. 변수: camelCase, PascalCase, UPPER_CASE
  2. 함수: camelCase, PascalCase
  3. class, enum 등 (포괄 설정): PascalCase
  4. interface: PascalCase, I prefix를 허용하지 않음
  5. typeAlias: PascalCase, T prefix를 허용하지 않음
  6. typeParameter: PascalCase, T prefix를 허용하지 않음

만약 컨벤션을 지키지 않았다면 오류가 발생합니다.

// Type Alias name `THi` must not match the RegExp: /^T[A-Z]/u
type THi = {
  hi: string;
};

Husky

Husky를 통해 다음과 같은 검증을 진행합니다.

  1. pre-commit: 커밋전 스테이지 파일 검증
  2. commit-msg: 커밋 후 커밋 메시지에 대한 검증을 진행

pre-commit시 lint 명령을 통해 검증을 진행한다면 모든 파일에 대해서 lining을 진행하기 때문에 lint-staged를 통해 현재 스테이지된 파일만 검증합니다.

{
  "name": "web21",
  "private": true,
  "scripts": {
    "lint": "turbo lint",
    "format": "prettier --write \"**/*.{js,jsx,ts,tsx,json,md}\"",
    "format:check": "prettier --check \"**/*.{js,jsx,ts,tsx,json,md}\"",
    "prepare": "husky"
  },
  "devDependencies": {
    "husky": "^9.1.6",
    "lint-staged": "^15.2.10",
  },
  "lint-staged": {
    "**/*.{js,jsx,ts,tsx}": [
      "eslint --fix",
      "prettier --write"
    ],
    "**/*.{json,md}": [
      "prettier --write"
    ]
  }
}

commit-msg에 경우 다음과 같은 검증을 진행합니다.

  1. {타입}: {메시지} 형식이 지켜지지 않았을 경우 오류 발생
  2. feat|test|fix|docs|test|refactor|design|style|chore가 포함되지 않았다면 오류 발생

commit-msg을 진행하며 발생한 성공/실패 여부에 대해 사용자에게 메시지를 제공합니다.

자세한 실행 결과는 스크린샷을 통해 확인할 수 있습니다.

스크린샷

Turborepo

image

Husky

1. pre-commit 실패 2. commit-msg 실패 3. commit-msg 성공
pre-commit 실패 commit-msg 실패 commit-msg 성공

- lint시 workspace에서 관리하는 모든 패키지에 대해 lint를 실행하도록 설정
- lint-staged를 통해 git에 추가된 파일에 대해서만 lint를 실행하도록 설정
- prepare를 통해 husky에 대한 설치 및 설정을 자동으로 진행하도록 설정
- naming convention 설정 추가
- import/order 설정 추가
- typescript 설정 추가
- prettier 설정 추가
- import/resolver 설정에서 project의 경로를 * 를 통해 가져오도록 설정
- 커밋 성공 시, 줄바꿈 추가
@seoko97 seoko97 added 🔨 Config 환경 설정 작업 ✨ Feature 새로운 기능 추가 labels Oct 29, 2024
@seoko97 seoko97 self-assigned this Oct 29, 2024
Copy link

This PR exceeds the recommended size of 1000 lines. Please make sure you are NOT addressing multiple issues with one PR. Note this PR might be rejected due to its size.

Copy link
Collaborator

@Fixtar Fixtar left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🚀

Copy link
Collaborator

@simeunseo simeunseo left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

고생 많으셨습니다! 🚀🚀🚀

@seoko97 seoko97 changed the base branch from main to develop October 29, 2024 15:29
@seoko97 seoko97 merged commit 3f49984 into develop Oct 29, 2024
1 check passed
@seoko97 seoko97 deleted the feat/init-project#2 branch October 29, 2024 15:52
@seoko97 seoko97 added this to the 통합 개발 환경 구축 milestone Nov 3, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
🔨 Config 환경 설정 작업 ✨ Feature 새로운 기능 추가 size/xl
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[Feat] 프로젝트 초기 설정
5 participants