npm workspace로 모노레포 구축하기

2023. 4. 3.·🎨 프론트엔드 공부/기타

📍참고

https://docs.npmjs.com/cli/v9/using-npm/workspaces?v=true 

 

workspaces | npm Docs

Working with workspaces

docs.npmjs.com

 

📍환경 체크

NPM 버전 확인

npm --version
9.6.3 # 230403 현재 최신버전

 

NPM을 최신 버전으로 업데이트하기

npm install npm@latest -g

 

📍Workspace 란?

✅단일 최상위 루트 패키지 내에서 로컬 파일 시스템의 여러 패키지 관리를 지원하는 npm cli의 기능 집합을 지칭

 

예) 최상위 package.json 이 하위 폴더의 package.json을 관리하고 보조

Workspace

├ package.json

├ view

│  └ package.json

├ server

│  └ package.json

...

 

장점

- 하위 프로젝트의 바로가기를 node_modules (루트에 단일하게 존재) 하위에 만들고 모듈처럼 사용 가능

- 하위 프로젝트 들이 사용하는 의존성을 중복없이 하나로 사용 가능

 

📍workspaces 정의하기

✅1. 루트의 package.json 에 workspace 프로퍼티를 추가하고 하위 패키지경로 입력

예) 루트(.) 의 package.json

{
  "name": "my-workspaces-powered-project",
  "workspaces": [
    "packages/view",
    "packages/server",
  ]
}

 

루트 디렉토리 (.) 의 하위 패키지 view의 루트는 packages 폴더 내에 생성된다

 

✅2. npm init

- packages 내에 view 하위 패키지를 workspace로 생성

-y 붙이기 가능 

npm init -w ./packages/view

- packages/view 폴더가 루트의 node_modules 폴더에 바로가기 처럼 연결된다

- workspace 끼리 모듈을 공유할 수 있다!

바로가기 생성

 

 

실행 결과

. # 루트
+-- node_modules
|  `-- view -> ../packages/view # ./packages/view 의 바로가기
+-- package-lock.json
+-- package.json
`-- packages
   +-- view # 하위 패키지
   |   `-- package.json

 

 

 

📍Workspace에 의존성 추가하기

✅workspace에 직접 의존성을 추가/삭제/업데이트할 수 있다

- workspace config에서 기본값 변경도 가능

 

아래와 같은 구조가 있을 때

.
+-- package.json
`-- packages
   +-- view
   |   `-- package.json
   `-- server
       `-- package.json

 

workspace view 에 등록되는 abbrev 패키지를 설치한다고 하면, 아래 명령어를 실행한다

npm install abbrev -w view

 

- abbrev 패키지는 루트의 node_modules에 설치되며, 하위 패키지에서 참조할 수있다

- uninstall, ci 같은 다른 명령어도 workspace config를 활용할 수 있다

 

참고 - workspace config

https://docs.npmjs.com/cli/v9/using-npm/config#workspace

 

config | npm Docs

More than you probably want to know about npm configuration

docs.npmjs.com

 

📍workspace 사용하기

✅workspace에서는 패키지들끼리 모듈을 공유할 수 있다

 

루트 패키지에서 하위 패키지의 모듈을 사용

 

./packages/view/index.js

module.exports = "이것은view의상수"

 

./index.js

const module1 = require("view");
console.log(module1); // 이것은view의상수

 

마찬가지로 하위 패키지들도 모듈을 공유할 수 있다 (server - view)

'🎨 프론트엔드 공부/기타' 카테고리의 다른 글
  • React Hook Form (1) Get Started
  • 시맨틱 버저닝(semantic versioning) 과 NPM
  • Matchers (Jest, RTL)
  • Testing Library의 Queries
지식물원
지식물원
지식이 자라는 식물원!
  • 지식물원
    지식물원
    지식물원
  • 전체
    오늘
    어제
    • 분류 전체보기 (510)
      • 🎨 프론트엔드 공부 (247)
        • JS & TS (86)
        • HTML & CSS (22)
        • React & Next (49)
        • Vue & Nuxt (22)
        • 기타 (68)
      • 🤓 기술 학습 & 공부 기록 (116)
        • Node.js (0)
        • Python (37)
        • 백엔드 (0)
        • 딥러닝 (1)
        • 컴퓨터 일반 (72)
        • 개발 인프라 (6)
      • 👨‍💻 프로젝트 경험 (6)
        • Work (0)
        • Toy (6)
      • ⚙️ 개발 팁 & 노하우 (21)
        • 프론트엔드 (6)
        • 기타 (15)
      • ☕️ 커리어 & 인터뷰 준비 (88)
        • 코딩 테스트 (88)
      • 📰 기술 트렌드 & 생각 정리 (4)
      • 📚 기타 (25)
        • 마케팅 (15)
        • 비개발서적 (10)
  • 블로그 메뉴

    • 태그
  • 링크

  • 공지사항

    • 모바일 접속 시 코드 하이라이팅 깨질 때
  • 인기 글

  • hELLO· Designed By정상우.v4.10.3
지식물원
npm workspace로 모노레포 구축하기
상단으로

티스토리툴바