Workspace는 로컬 파일 시스템 내에서 파일 간 여러 패키지들을 하나의 Root 패키지에서 관리할 수 있도록 하는 기능을 이야기한다(출처).
이를 이해하는 가장 좋은 방법은 unix의 symbolic link(symbolic link)를 연상하는 것이다. soft link를 사용하는 특정 파일의 링크(바로가기)를 만들 수 있다.
$ ln -s source_file target_file
이제 target_file에 접근하면 source_file에 접근하게 된다. 하나의 파일이 여러 군데에서 필요할 때, 같은 파일을 중복하여 만드는 것이 아닌 바로가기를 만들어 원본을 하나만 유지할 수 있도록 하는 방식이 바로 unix ln(link)이다.
패키지를 관리할 때도 마찬가지다. 하나의 패키지가 여러 프로젝트에서 사용될 때, 중복 설치를 방지하기 위해 npm link를 사용할 수 있다. npm link를 통해 node_modules에 특정 패키지 폴더의 바로가기를 만들 수 있다.
# 특정 패키지의 바로가기를 가져올 프로젝트에서
npm link ../project-a/package-example
다음과 같이 Symbolic Link라는 표시와 함께 node_modules에 링크 폴더가 추가된 것을 볼 수 있다.
[모던 프론트엔드 구성] 1. npm workspace로 모노레포 구현하기
workspace는 npm install
시 npm link
를 자동화해주어 여러 파일 시스템에서 중복된 패키지 관리를 더 쉽게 만들어준다. workspace를 통해서 개별 프로젝트에서 서로의 패키지를 상호 참조할 수 있으며, root에서 의존성을 일괄적으로 처리할 수 있다!
명령어 npm init --workspace [워크스페이스가 들어갈 폴더 path]
를 통해서 워크스페이스를 만들 수 있다. 다음과 같이 워크스페이스는 root 폴더의 packages
폴더 내에 만드는 것이 관례라 한다.
# root 위치에서
npm init --workspace ./packages/app
ls
+--package.json
`--packages
`--app
`--package.json