2025-08-31 13:21
npm
-
package.json
파일은 프로젝트의 정보와 의존성을 명시하는 설계도 역할을 하며,npm install
명령어로 필요한 모든 패키지를node_modules
폴더에 설치 -
npm 없을때는 직접 스크립트 링크를 심거나 직접 다운 받는 식으로 사용해야 했음(제이쿼리, 부트스트랩)
- 버전관리, 협업, 업데이트, 의존성 관리 등 프로젝트가 커지고 복잡해질수록 매우 어려워짐
“자바스크립트 개발자들이 만든 유용한 코드 조각(패키지)을 쉽게 공유하고, 다른 사람의 코드를 내 프로젝트에 쉽게 가져와 사용하며, 이 모든 과정(의존성 관리)을 자동화하자!”
-
npm 레지스트리(Registry): 전 세계의 모든 자바스크립트 패키지(책)가 모여있는 거대한 온라인 데이터베이스(도서관).
-
package.json
: 내 프로젝트가 어떤 패키지(책)들을, 어떤 버전으로 필요로 하는지 명시한 목록(대출 카드). -
npm CLI
: 레지스트리에서 패키지를 찾아 내 컴퓨터로 가져오고,package.json
을 관리하는 도구(사서). -
package.json
: 우리 프로젝트에 대략 어떤 책들이 필요한지 적어둔 ‘희망 도서 목록’. -
package-lock.json
: 실제로 도서관에서 빌려온 모든 책들의 정확한 버전(판)과 정보가 담긴 ‘실제 대출 기록부’. -
node_modules
: 대출 기록부를 바탕으로 실제 책들이 꽂혀있는 ‘내 책장’. -
npx의 핵심 기능은 패키지를 로컬에 설치하지 않고도 실행할 수 있게 해주는 것.
속성 (Property) | 설명 | 예시 |
---|---|---|
name | 패키지의 이름. npm 레지스트리에서 유일해야 합니다. | "my-awesome-app" |
version | 패키지의 버전. SemVer(유의적 버전) 규칙을 따릅니다. | "1.0.0" |
description | 패키지에 대한 간략한 설명. 검색 시 노출됩니다. | "A revolutionary new application." |
main | 패키지의 진입점(entry point)이 되는 파일. | "index.js" |
scripts | npm run <스크립트이름> 으로 실행할 수 있는 커스텀 명령어. | "start": "node index.js" |
dependencies | 프로덕션 환경에서 필요한 패키지 목록. 앱 실행에 필수적. | "express": "^4.17.1" |
devDependencies | 개발 환경에서만 필요한 패키지 목록. (테스트, 빌드 도구 등) | "jest": "^27.0.6" |
author | 패키지 제작자 정보. | "John Doe <john.doe@example.com>" |
license | 패키지의 라이선스. | "MIT" |
명령어 | 설명 |
---|---|
npm init | 새로운 프로젝트를 시작합니다. package.json 파일을 생성하기 위해 몇 가지 질문을 합니다. npm init -y 를 사용하면 모든 질문에 기본값으로 자동 응답합니다. |
npm install <패키지> | 특정 패키지를 설치합니다. 기본적으로 dependencies 에 추가됩니다. 약어는 npm i 입니다. 예: npm install react |
npm install | package.json 에 명시된 모든 패키지를 node_modules 에 설치합니다. 프로젝트를 클론한 후 가장 먼저 실행하는 명령어입니다. |
npm install <패키지> --save-dev | 개발용 의존성을 설치합니다. devDependencies 에 추가됩니다. 약어는 -D 입니다. 예: npm i tailwindcss -D |
npm install <패키지> -g | 패키지를 전역(global) 으로 설치합니다. 프로젝트에 종속되지 않고 컴퓨터의 모든 위치에서 사용할 수 있는 CLI 도구를 설치할 때 주로 사용합니다. 예: npm install -g create-react-app |
npm uninstall <패키지> | 설치된 패키지를 제거합니다. package.json , package-lock.json , node_modules 에서 모두 삭제됩니다. 약어는 npm rm 입니다. 예: npm uninstall moment |
npm update | package.json 에 명시된 버전 범위 내에서 패키지들을 최신 버전으로 업데이트하고 package-lock.json 을 갱신합니다. |
npm run <스크립트이름> | package.json 의 scripts 객체에 정의된 명령어를 실행합니다. 예: npm run start , npm run build |
npm search <키워드> | npm 레지스트리에서 특정 키워드를 포함하는 패키지를 검색합니다. |
npm audit | 프로젝트의 의존성 트리를 스캔하여 알려진 보안 취약점이 있는지 검사하고 보고서를 제공합니다. npm audit fix 로 일부 문제를 자동으로 해결할 수 있습니다. |
특징 | npm | yarn (Classic) | pnpm |
---|---|---|---|
속도 | 초기에는 느렸으나, 버전 5 이후 캐싱 도입 등으로 크게 개선됨. | 병렬 다운로드 기능으로 출시 당시 npm보다 훨씬 빨랐음. | 가장 빠름. 중복 파일을 하드 링크로 관리하여 설치 속도와 디스크 공간 효율이 극대화됨. |
node_modules 구조 | 중첩 구조(v2) → 평탄화 구조(v3+). 유령 의존성(phantom dependency) 문제 발생 가능. | npm v3+ 와 유사한 평탄화 구조. | node_modules 를 평탄화하지 않음. 심볼릭 링크를 사용해 의존성을 관리하여 유령 의존성 문제를 원천 차단. |
디스크 공간 | 프로젝트마다 모든 패키지를 별도로 저장하여 공간 낭비가 있을 수 있음. | npm과 유사. | 전역 저장소를 사용해 패키지를 한 번만 다운로드하고, 각 프로젝트에서는 링크로 참조. 디스크 공간을 획기적으로 절약. |
lock 파일 | package-lock.json | yarn.lock | pnpm-lock.yaml |
- 현재는 npm 자체도 많은 개선을 이루어 속도나 기능 면에서 yarn과 큰 차이가 없는 수준까지 올라왔다.