Hyunjung Im

Frontend Developer

github

npm workspaces

2024-05-23

npm workspaces를 사용하면 패키지 관리가 독립적으로 이뤄지는 줄 알았는데 완전 착각했다. 작업된 것만 보고 혼자 생각하지 말고 꼭 문서를 보자.

workspaces

  • 최상위 루트 패키지 내에서 여러 패키지를 관리할 수 있도록 지원하는 npm cli 기능
  • npm v.7부터 사용 가능
  • 패키지 종속성을 독립적으로 관리할 수 있는 목적이 아님. 종속성을 공유하는 것에 더 초점이 맞춰져있는듯 함
    • 패키지 내의 종속성은 root node_modules에 설치됨.
    • 독립적으로 관리하기 위해서는 모노레포 형식 사용해야함. yarn, pnpm, 터보레포 등..
// packages.json
{
	"name": "my-workspaces-powered-project",
	"workspaces": ["packages/workspace-a"]
}
  • 배열로 관리된다. 배열의 순서는 실행 순서와 관련있다.

심볼릭 링크로 root node_modules와 패키지 연결

root 내의 packagess 폴더에 workspace-a 패키지가 있을 때 packages.json workspaces 배열 안에 추가하면 root의 node_modules 안에 해당 패캐지 name으로 폴더가 생기는데, 해당 폴더는 packages/workspace-a 와 심볼릭 링크된 파일이다. 이 말인 즉슨 packages/workspace-a 안의 내용물을 수정하면 node_modules/<패키지> 경로안의 내용물도 똑같이 반영된다는 말

workspace 정의하기

  • npm init -w ./packages/a

root에서 패키지 실행하기

{
	"workspaces": ["packages/a", "packages/b"]
}
  • npm run test --workspace=a

    • a 만 test 실행함
  • npm run test --workspace=a --workspace=b

    • a, b test 실행함
  • npm run test --workspaces

    • 모든 패키지에서 test 실행함
    • 배열의 순서대로 실행함

한 번에 실행할 때 해당 script 없는 것 무시하기 - --if-present

  • npm run test --workspaces --if-present
    • test script가 있는 것만 실행됨.

종속성 공유의 장점

  • 패키지 중복 다운로드 방지, 공간 최적화, 종속성 관리 최소화