프론트엔드 의존성
GitLab v19.4요약
GitLab은 프론트엔드 의존성 관리에 yarn@1을 사용합니다. GitLab 리포지터리에는 몇 가지 예외가 있으며, vendor/assets/에 보관돼 있습니다. 이 의존성은 package.json 안에서 dependencies와 devDependencies 두 그룹으로 정의합니다.
GitLab은 프론트엔드 의존성 관리에 yarn@1을 사용합니다.
GitLab 리포지터리에는 몇 가지 예외가 있으며, vendor/assets/에 보관돼 있습니다.
프로덕션 의존성과 개발 의존성 구분#
이 의존성은 package.json 안에서 dependencies와 devDependencies 두 그룹으로 정의합니다.
GitLab에서는 프로덕션 애셋을 컴파일하는 데 필요한 것을 모두 "프로덕션" 의존성으로 간주합니다.
즉, NODE_ENV=production으로 webpack 스크립트를 실행하는 데 필요한 모든 것입니다.
eslint, jest를 비롯해 개발 과정에서 사용하는 여러 플러그인과 도구는 devDependencies로 분류합니다.
이 구분은 omnibus가 GitLab을 빌드할 때 필요한 의존성을 판단하는 데 사용합니다.
컴파일 후 프로덕션 애셋을 분석하는 webpack-bundle-analyzer처럼
compile-production-assets CI job에서 필요한 일부 도구에는
예외를 둡니다.
의존성 업데이트#
의존성 업데이트에 관한 일반적인 내용은 의존성 페이지를 참고합니다.
의존성 패치#
patch-package로 의존성에 패치를 적용할 수 있습니다. 패치는 patches/ 디렉터리에 보관합니다.
패치가 정당한 경우#
의존성 패치는 기술 부채이므로 최후의 수단으로만 적용해야 합니다. 의존성을 패치할 수 있는 사유는 다음과 같습니다.
- 더 이상 유지 보수되지 않아 해당 변경이 포함된 업스트림 버전이 없는 경우
- 업스트림의 수정을 기다릴 수 없는 취약점이 확인된 경우
- GitLab 에만 해당하며 업스트림에서 변경되지 않거나 변경될 수 없는 부분을 바꾸는 경우
의존성 패치 적용#
- 가능하다면 패치가 의도한 동작을 달성하는지 확인하는 테스트를 추가합니다.
node_modules안의 해당 파일을 직접 편집합니다. 편집 내용에 다음을 설명하는 주석을 반드시 포함합니다.- 패치가 필요한 이유
- 패치를 제거할 수 있는 시점
- 패치가 해결하는 문제를 설명하는 이슈나 머지 리퀘스트 링크
yarn patch-package <package-name>을 실행해 편집 내용에서 패치를 생성합니다.git add patches/로 패치를 추가합니다.- 평소와 같이 커밋합니다.
패치 업데이트#
@vue/compat 패치는 별도 처리가 필요합니다. scripts/frontend/update_vue_compat_patches.mjs를 실행하면 과정을 안내받을 수 있습니다.
패치는 의존성의 특정 버전에 종속됩니다. 해당 의존성을 업데이트하면 그에 대한 패치도 함께 업데이트해야 합니다.
패치가 문제없이 적용되는 경우는 다음과 같이 진행합니다.
yarn patch-package <package-name>을 실행해 새 버전에 적용되도록 패치 이름을 변경합니다.git add patches/를 실행합니다.- 평소와 같이 커밋합니다.
패치가 깔끔하게 적용되지 않으면 그 패치가 여전히 필요한지 판단합니다.
- 필요하다면 새 패치를 처음부터 생성합니다.
- 필요하지 않다면 패치 파일을 삭제하고 커밋합니다.
더 이상 필요하지 않다는 점을 확인하지 않은 채 패치나 패치의 일부를 삭제하지 않습니다. 확신이 서지 않으면 해당 패치를 도입한 사람에게 문의합니다.