전체 치트시트프런트엔드 개발

npm

npm 10+

매일 쓰는 npm CLI 명령어 빠른 참조 — init / install / add / remove / update / scripts / run / publish / audit, 그리고 lockfile, 레지스트리, 캐시 관리 — 자주 쓰는 옵션과 실전 예시까지 함께 정리했습니다.

명령어 34개

프로젝트 초기화

npm init

`package.json` 생성을 인터랙티브하게 진행하며, 이름 / 버전 / 설명 / 진입점 등을 묻습니다.

-y 모든 기본값 수락; --init.author 'Name <e@x>' 기본값 재정의

npm init -y
npm init -y

합리적인 기본값(`name`은 디렉터리 이름, `version` 1.0.0 등)으로 `package.json`을 바로 생성합니다 — 현대적인 시작점입니다.

npm init -y && cat package.json

설치

npm install

`package.json`의 모든 의존성을 설치하고 `node_modules`와 `package-lock.json`을 갱신합니다. `NODE_ENV=production`이면 dev 의존성을 건너뜁니다.

--save-exact / -E 정확한 버전 고정; --legacy-peer-deps; --force; --no-audit; --prefer-offline

npm install
npm ci

`package-lock.json`만으로 엄격하게 클린 설치합니다. `npm install`보다 빠르고 `node_modules`를 먼저 삭제하며, lockfile을 변경하지 않습니다 — CI에 적합합니다.

--omit=dev devDependencies 생략; --prefer-offline

npm ci --omit=dev

의존성 추가

npm install <pkg>

런타임 의존성을 추가합니다(기본 `dependencies`). `package-lock.json`에 해석된 버전을 기록하고 `package.json`을 갱신합니다.

<pkg>@<version-range>; --save-dev / -D; --save-exact / -E; --save-optional / -O; --save-prod / -P

npm install lodash && npm install eslint@^9 --save-dev
npm install <pkg>@<version>

특정 버전 범위(semver)를 설치합니다: 정확한 `1.2.3`, 틸드 `~1.2.3`, 캐럿 `^1.2.3`, 또는 `latest` / `next` / `beta` 같은 태그.

npm install [email protected] && npm install next@latest
npm install -D <pkg>

`devDependencies`에 추가합니다 — 빌드 / 테스트 시점에만 필요한 도구(TypeScript, Jest, ESLint, Prettier).

npm install -D typescript @types/node vitest
npm install -g <pkg>

모든 프로젝트에서 `PATH`의 바이너리를 쓸 수 있도록 패키지를 글로벌로 설치합니다(TypeScript, tsx, create-react-app, http-server).

npm install -g typescript tsx pnpm

제거

npm uninstall <pkg>

`node_modules`와 `package.json`에서 패키지를 제거합니다.

-D devDependencies에서 제거; -g 글로벌 제거; --save false 매니페스트 편집 생략(드묾)

npm uninstall lodash && npm uninstall -D @types/node

업데이트

npm update

`package.json`의 semver 범위 안에서 모든 의존성을 업그레이드하고 `package-lock.json`도 갱신합니다.

--save false 매니페스트 작성 생략; --workspace 워크스페이스 내부 업데이트

npm update
npm update <pkg>

현재 semver 범위를 만족하는 최신 버전으로 한 패키지를 업데이트합니다.

npm update eslint
npm install <pkg>@latest

한 패키지를 최신 릴리스로 업그레이드합니다(semver 범위를 무시하고 `^<new-version>`으로 다시 씁니다).

npm install typescript@latest && npm install -D vitest@latest

스크립트 실행

npm run <script>

`package.json`의 `scripts` 섹션에 정의된 스크립트를 실행합니다. `npm test`, `npm start`, `npm stop`, `npm restart`는 `npm run X`의 축약형입니다.

-- npm 로그 노이즈 억제; --if-present 없어도 에러 안냄; -- <args> 나머지 인수를 스크립트로 전달

npm run build -- --mode production
npm run <script> -- <args>

내부 스크립트에 추가 CLI 인수를 전달합니다. `--` 뒤의 모든 내용이 그대로 전달됩니다.

npm run lint -- --fix src/
npm exec -- <command>

로컬 또는 `npx` 캐시 패키지의 명령을 실행합니다. 더 이상 권장되지 않는 `npx <command>` 직접 호출을 대체합니다.

npm exec -- create-react-app my-app

검사

npm ls

현재 프로젝트의 의존성 트리(최상위 + 전이)를 출력합니다. 패키지 중복 복사본을 찾을 때 유용합니다.

--all; --depth=N 깊이 제한; --json JSON 출력; -g 글로벌 나열

npm ls --depth=0 && npm ls react
npm outdated

설치된 버전이 매니페스트 범위의 최신 버전보다 오래된 모든 의존성을 표로 보여줍니다.

--long 자세히; --json JSON 출력

npm outdated
npm view <pkg>

패키지의 레지스트리 메타데이터를 표시합니다 — 버전, dist-tags, 의존성, 메인테이너, 리포지터리 URL, readme 발췌.

versions; time; dist-tags; repository.url

npm view lodash versions && npm view react dist-tags

Lockfile

npm shrinkwrap

lockfile 없이 배포되어도 재현 가능한 설치가 필요한 앱을 위해 독립적인 `npm-shrinkwrap.json`(`package-lock.json`과 같은 형식)을 생성합니다.

npm shrinkwrap

레지스트리

npm config get registry

현재 활성 레지스트리 URL을 출력합니다. 기본값은 `https://registry.npmjs.org/`입니다.

npm config get registry
npm config set registry <url>

npm을 프라이빗 / 캐시 레지스트리(GitHub Packages, Verdaccio, 중국 미러)로 가리키도록 설정합니다. `~/.npmrc` 또는 프로젝트 `.npmrc`에 기록됩니다.

npm config set registry https://registry.npmmirror.com/
npm login

설정된 레지스트리에 인증하고 토큰을 `~/.npmrc`에 저장합니다. `npm publish` 전에 필요합니다.

--registry=<url> 다른 레지스트리로 로그인; --scope=<scope> 토큰 범위 제한

npm login --registry=https://registry.npmjs.org/

게시

npm publish

현재 패키지를 설정된 레지스트리에 업로드합니다. `package.json`에 `name`(그리고 보통 `version`, `repository`)과 게시 권한을 가진 로그인 사용자가 필요합니다.

--access public|restricted(scoped 패키지); --dry-run; --tag <tag> dist-tag으로 게시

npm publish --access public --tag beta
npm unpublish <pkg>@<version>

특정 버전을 레지스트리에서 제거합니다. 게시 후 72시간 이내에는 **권장하지 않습니다** — npm은 지원은 하지만 비권장합니다.

npm unpublish [email protected]
npm deprecate <pkg>@<version> '<msg>'

버전을 de deprecated으로 표시하고 npm이 설치 시 출력할 메시지를 함께 둡니다. 이력을 삭제하지 않고 사용자에게 수정 버전을 가리키는 정석 방법입니다.

npm deprecate [email protected] 'use 1.2.4+ — security fix'

감사

npm audit

설치된 의존성 트리에 대해 보안 감사를 실행하고, npm 레지스트리의 권고 정보를 가져옵니다.

--json; --omit=dev dev 의존성 생략; --audit-level=low|moderate|high|critical

npm audit --omit=dev
npm audit fix

권고를 해소하는 호환 범위 내 최신 버전으로 패키지를 자동으로 업그레이드합니다. semver 메이저 점프를 허용할 때만 `npm audit fix --force`를 사용하세요.

--force; --dry-run

npm audit fix

캐시

npm cache clean --force

글로벌 npm 캐시(POSIX는 `~/.npm`)를 비웁니다. 레지스트리를 바꾼 뒤나 이상한 설치 오류를 추적할 때 사용합니다.

npm cache clean --force
npm cache verify

삭제하지 않고 캐시된 tarball의 무결성을 검증합니다. 언제든 안전하게 실행할 수 있습니다.

npm cache verify

워크스페이스

npm install -w <workspace>

모노레포의 단일 명명 워크스페이스(`package.json`의 `workspaces`에 정의됨)에 패키지를 설치합니다.

npm install lodash -w @myorg/web
npm run <script> -ws

모노레포의 모든 워크스페이스에서 스크립트를 실행합니다. `-w <name>`은 한 워크스페이스에서만 실행합니다.

--if-present 없어도 에러 안냄

npm run build -ws && npm test -w @myorg/api

기타

npm doctor

환경 진단을 실행합니다(Node 버전, 레지스트리 접근성, 캐시 상태, Git 존재 여부) — 문제 해결 시 유용합니다.

npm doctor
npm fund

현재 프로젝트의 직접 의존성에 대한 후원 링크를 출력합니다(메인테이너가 OSS를 후원받는 용도).

npm fund
npm pkg set <key>=<value>

에디터를 열지 않고 CLI에서 `package.json`의 필드를 변경합니다. 스크립트 / hook에서 유용합니다.

npm pkg set scripts.lint='eslint .' && npm pkg get version

관련 명령어 치트시트

npm 소개

npm은 Node.js의 기본 패키지 매니저입니다. Isaac Z. Schlueter가 2010년에 독립 도구로 처음 작성했으며, 2011년 Node.js 0.6.3부터 Node에 동봉되어 제공됩니다. 이름은 `Node Package Manager`의 약자였지만, 팀은 2014년부터 공식적으로 약자로 취급하지 않고 있습니다. 현재 안정 버전은 npm 10으로, Node 20+와 함께 배포됩니다. npm은 레지스트리(기본 `registry.npmjs.org`, 2020년부터 GitHub가 호스팅하는 공개 CouchDB)와 통신하며, `package.json`과 `package-lock.json`을 읽고/쓰고, 로컬 설치(프로젝트의 `node_modules`)와 글로벌 설치(PATH에 추가)를 모두 지원합니다. npm 7+부터는 모노레포를 위한 workspaces를 도입했고, npm 9+에는 `npx`가 내장되어 있으며 엄격한 peer dependency 엔진이 포함됩니다. 대부분의 npm 명령은 `-D`(dev), `-E`(exact), `-g`(global), `--save-prod` 그리고 비표준 설치 디렉터리용 `--prefix` 플래그를 받습니다. npm은 코드를 절대 업로드하지 않으며, 로컬 파일과 레지스트리에만 기록합니다. 익명 다운로드 통계는 npm 레지스트리에서 집계하지만 프로젝트 내용은 전송되지 않습니다.

치트시트 버전 1.0.0