Levo 가이드 · 개발자: 기타

Mac 전체의 node_modules 폴더 찾아서 삭제하는 방법

node_modules 폴더는 모두 지울 수 있어요. npm install, pnpm install, yarn가 잠금 파일에서 다시 만들어요. 문제는 어떤 폴더가 다시 설치하는 시간을 들일 만하냐는 것뿐이고, 보통은 한 달 동안 열지 않은 프로젝트예요.

node_modules 폴더와 패키지 캐시가 각각 크기와 이유와 함께 표시된 Levo의 Ready to free 목록
항목위치지워도 되나요?
프로젝트 의존성<project>/node_modules네. install가 다시 만들어요
중첩된 복사본node_modules/*/node_modules그대로 두세요. 부모와 함께 사라져요
링크된 패키지npm link가 만드는 심볼릭 링크링크를 지우세요. 링크가 가리키는 원본은 지우지 마세요
전역 패키지/opt/homebrew/lib/node_modules 또는 Node 버전의 lib아니요. 직접 설치한 도구예요

이렇게 많은 이유

JavaScript 프로젝트는 저마다 모든 의존성의 복사본을 갖고, 대부분 그 의존성의 의존성까지 가져요. 작은 React 앱도 300MB는 쉽게 넘어요. 모노레포는 2GB를 넘기도 해요. 몇 년간의 사이드 프로젝트, 튜토리얼, 클론한 저장소가 쌓이면 신경 쓰지 않던 수십 GB가 돼요. 가끔 여는 프로젝트 안에 폴더가 있기 때문이에요.

직접 하는 방법

전부 찾기

터미널을 열고 홈 폴더 아래의 모든 node_modules 폴더를 큰 것이 맨 마지막에 오도록 나열하세요. -prune는 find가 각 폴더 안으로 들어가지 않게 해서 빠르게 해 줘요.

find ~ -name node_modules -type d -prune -not -path "*/Library/*" -exec du -sh {} + 2>/dev/null | sort -h | tail -30

목록에는 크기와 경로가 나와요. ~/Library 아래는 일부러 건너뛰어요. 에디터나 Electron 도구 같은 앱이 자체 복사본을 두는 곳이라 내가 지울 게 아니에요. 앱 번들 안의 폴더도 마찬가지예요.

프로젝트 하나의 폴더 삭제

cd ~/Developer/old-project
rm -rf node_modules

이건 되돌릴 수 없어요. rm은 휴지통을 쓰지 않아요. 리턴 키를 누르기 전에 경로를 확인하세요. 되돌릴 수 있게 하고 싶다면 대신 Finder에서 폴더를 휴지통으로 끌어다 놓으세요. 다만 작은 파일 5만 개가 든 폴더는 Finder가 옮기는 데 오래 걸릴 수 있어요.

npkill로 한 번에 많이 삭제

npkill은 폴더를 스캔해서 모든 node_modules를 크기와 마지막 수정일과 함께 나열하고, 화살표 키와 스페이스바로 지울 수 있게 해요. 설치할 필요는 없어요.

cd ~/Developer
npx npkill

크기순이나 마지막 수정순으로 정렬하고 위에서부터 내려가세요. 유용한 건 마지막 수정 열이에요. 1년 동안 건드리지 않은 폴더는 믿고 지워도 돼요.

건너뛸 프로젝트

pnpm에서는 node_modules 대부분이 하나의 공유 저장소로 향하는 링크라서, 프로젝트 폴더를 지워도 du가 보여 주는 것만큼 비워지지 않아요. 파일은 어디에서도 링크하지 않을 때만 해제되고, 그것도 pnpm store prune 이후예요. npm, pnpm, Yarn, Bun 캐시 지우는 방법을 참고하세요.

함께 살펴볼 것

node_modules 옆에는 프로젝트가 남기는 빌드 결과물이 있어요. .next, .nuxt, dist, .turbo, .parcel-cache예요. 다음 빌드에서 다시 만들어지지만, 일부 프로젝트는 일부러 포함하니까 지우기 전에 dist가 git에 커밋되어 있지 않은지 확인하세요. Python 프로젝트도 무거운 폴더를 남겨요. 오래된 Python 가상 환경 찾아서 삭제하는 방법에서 다뤄요.

Levo는 이렇게 해요

Levo는 디스크를 채우는 것의 최신 인덱스를 유지해서 모든 node_modules의 위치와 크기를 이미 알고 있어요. Ready to free의 프로젝트 의존성 아래에 패키지 캐시와 함께 크기와 이유가 붙어서 나와요.

판단은 내 AI 에이전트가 해요. 각 프로젝트를 읽고 쓰지 않는지 판단하고, Levo는 폴더 안에서 아무것도 실행 중이지 않을 때만 선택해요. 개발 서버, 열려 있는 파일, 코딩 에이전트 세션이 없을 때예요. 오늘 아침에 건드린 프로젝트는 선택되지 않아요. 에이전트는 읽기만 할 수 있어요. 지우는 건 Levo가 직접 하고, 지우기 직전에 폴더를 다시 확인해요.

정리 수준을 고르고 Select › Smartly를 선택한 다음 남기고 싶은 것은 체크를 해제하고 Clean up을 누르세요. Move to Trash를 켜 두면 폴더를 되돌릴 수 있어요. 설정 방법은 웹 개발자를 위한 Levo에서 설명해요. 지켜보기와 제안은 무료이고, 정리는 두 번까지 무료이고, 그다음은 평생 라이선스예요.

자주 묻는 질문

node_modules는 공간을 얼마나 쓰나요?

프로젝트에 따라 달라요. 작은 앱은 200~400MB인 경우가 많고, 큰 모노레포는 2GB를 넘기도 해요. 몇 년간의 프로젝트를 모두 합치면 대부분의 개발자가 수십 개의 폴더에 흩어진 10~50GB를 발견해요.

node_modules를 지우면 프로젝트가 망가지나요?

아니요. 다음에 npm install, pnpm install, yarn을 실행하면 잠금 파일에서 폴더가 다시 만들어져요. 프로젝트의 소스 파일은 건드리지 않아요. 예외는 폴더 안에서 직접 고친 파일과 npm에서 내려진 패키지예요.

개발 서버가 실행 중일 때 node_modules를 지워도 안전한가요?

지우지 마세요. 서버가 충돌하거나 깨진 페이지를 내보낼 수 있고, 파일 감시기가 삭제 도중에 실패할 수 있어요. 먼저 서버를 멈추세요.

rm -rf node_modules는 왜 이렇게 느린가요?

폴더 하나에 작은 파일이 5만~20만 개 들어 있을 수 있고, 하나씩 지워야 해요. 거의 가득 찬 디스크에서는 더 느려요. 터미널에서 지우는 게 Finder에서 휴지통으로 옮기는 것보다 훨씬 빨라요.

잠금 파일도 지워야 하나요?

아니요. package-lock.json, pnpm-lock.yaml, yarn.lock은 남겨 두세요. 다시 설치했을 때 같은 버전이 나오게 해 주는 기록이에요.