Node.js는 JavaScript로 서버측 애플리케이션을 작성하는 데 사용되는 JavaScript 런타임입니다. Node.js는 다양한 패키지와 모듈을 제공하며 이러한 패키지와 모듈을 관리하기 위해 npm(Node Package Manager)이 제공됩니다.

npm은 Node.js의 공식 패키지 관리자입니다. 개발자는 npm을 사용하여 Node.js 패키지 및 모듈을 설치, 업데이트, 삭제 및 관리할 수 있습니다. 이러한 패키지와 모듈을 사용하면 프로젝트를 더 쉽고 빠르게 빌드할 수 있습니다.

개발자는 npm을 사용하여 다른 사람이 작성한 패키지와 모듈도 쉽게 사용할 수 있습니다. npm 레지스트리에서 원하는 패키지나 모듈을 검색하고 설치한 다음 프로젝트에 포함하기만 하면 됩니다. 또한 npm은 코드 공유를 위한 플랫폼으로 사용됩니다. 개발자는 코드를 npm에 업로드하여 다른 사람이 사용할 수 있도록 할 수 있습니다.

npm은 Node.js와 함께 설치되며 명령줄 인터페이스를 통해 액세스할 수 있습니다. npm이 제공하는 사용 편의성 덕분에 Node.js 개발자는 거의 보편적으로 npm을 사용하여 패키지와 모듈을 관리합니다.

NPM 명령어

npm 에는 다양한 명령어가 존재 합니다. 자주 사용되는 명령어를 정리해 봅시다.
NPM CLI Commands

초기화/패키지 설치 관련

npm -v

npm 의 버전을 표시합니다.

C:\packageName>npm -v
6.14.6

npm config

npm의 설정을 표시 또는 설정 할 수 있습니다.
npm set, npm get 을 통해서 설정 및 조회가 가능합니다.

npm config list

metrics-registry = "https://registry.npmjs.org/"
scope = ""
user-agent = "npm/6.14.6 node/v12.18.2 win32 x64"

; builtin config undefined
prefix = "C:\\Users\\Admin\\AppData\\Roaming\\npm"

; node bin location = C:\nodejs\node.exe
; cwd = D:\패키지 위치
; HOME = C:\Users\Admin
; "npm config ls -l" to show all defaults.


D:\>npm get prefix
C:\Users\Admin\AppData\Roaming\npm

npm init

package.json 생성 합니다.
프로젝트 패키지를 생성 합니다.

npm init <package-spec> (same as `npx <package-spec>`)
npm init <@scope> (same as `npx <@scope>/create`)

aliases: create, innit


> npm init
This utility will walk you through creating a package.json file.        
It only covers the most common items, and tries to guess sensible defaults.

See `npm help init` for definitive documentation on these fields        
and exactly what they do.

Use `npm install <pkg>` afterwards to install a package and
save it as a dependency in the package.json file.

Press ^C at any time to quit.
package name: (폴더명)
version: (1.0.0)
description:
entry point: (index.js)
test command:
git repository:
keywords:
author:
license: (ISC)
About to write to D:\DEV-Source\tech_npm\package.json:

{
  "name": "폴더명",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC"
}
Is this OK? (yes)

npm install

npm install 패키지명 으로 패키지를 설치 합니다.
--save or -S : dependencies에 추가
--save-dev or -D : devDependencies에 추가
-g : global 패키지에 추가

npm install [<package-spec> ...]

aliases: add, i, in, ins, inst, insta, instal, isnt, isnta, isntal, isntall


npm install sax
npm install githubname/reponame
npm install @myorg/privatepackage
npm install node-tap --save-dev
npm install dtrace-provider --save-optional
npm install readable-stream --save-exact
npm install ansi-regex --save-bundle
npm install "패키지명"@0.0.1       //패키지 특정 @버전 설치      

npm uninstall

npm uninstall 패키지명 으로 패키지를 제거/삭제 합니다.
--save or -S : dependencies에 추가
--save-dev or -D : devDependencies에 추가
-g : global 패키지에 추가

npm uninstall [<@scope>/]<pkg>...

aliases: unlink, remove, rm, r, un


npm install sax
npm install githubname/reponame
npm install @myorg/privatepackage
npm install node-tap --save-dev
npm install dtrace-provider --save-optional
npm install readable-stream --save-exact
npm install ansi-regex --save-bundle

npm update

설치한 패키지를 업데이트하는 명령어입니다.

npm update [<pkg>...]

aliases: up, upgrade, udpate

관련 정보 조회

npm root

패키지 설치 경로인 node_modules 의 위치를 출력 합니다.

C:\test_npm>npm root
C:\test_npm\node_modules

npm outdated

설치된 패키지의 현재 버전과 패키지의 최신 버전 등 패키지 버전에 대한 정보를 확인 할 수 있습니다.

npm outdated [<package-spec> ...]

C:\packageName>npm outdated
Package                        Current       Wanted          Latest  Location
axios                           0.19.2       0.19.2           1.3.4  packageName
body-parser                     1.19.0       1.20.2          1.20.2  packageName
cheerio                     1.0.0-rc.3  1.0.0-rc.12     1.0.0-rc.12  packageName
cookie-parser                    1.4.5        1.4.6           1.4.6  packageName
ejs                              3.0.2        3.1.8           3.1.8  packageName
express                         4.17.1       4.18.2          4.18.2  packageName
express-mysql-session            2.1.4        2.1.8           2.1.8  packageName
express-session                 1.17.1       1.17.3          1.17.3  packageName
http                             0.0.0        0.0.0  0.0.1-security  packageName
lodash                         4.17.15      4.17.21         4.17.21  packageName
moment                          2.24.0       2.29.4          2.29.4  packageName
express-mysql-session            2.1.4        2.1.8           2.1.8  packageName
express-session                 1.17.1       1.17.3          1.17.3  packageName
http                             0.0.0        0.0.0  0.0.1-security  packageName
lodash                         4.17.15      4.17.21         4.17.21  packageName
moment                          2.24.0       2.29.4          2.29.4  packageName
node-cron                        2.0.3        2.0.3           3.0.2  packageName
node-html-to-image               2.1.1        2.1.1           3.3.0  packageName
nodemailer                       6.4.6        6.9.1           6.9.1  packageName
passport                         0.4.1        0.4.1           0.6.0  packageName
puppeteer                        3.0.2        3.3.0          19.7.2  packageName
querystring                      0.2.0        0.2.1           0.2.1  packageName
randomstring                     1.1.5        1.2.3           1.2.3  packageName
serve-static                    1.14.1       1.15.0          1.15.0  packageName
sharp                           0.25.2       0.25.4          0.31.3  packageName
url-search-params-polyfill       8.1.0        8.1.1           8.1.1  packageName

npm ls, npm list

패키지 정보를 조회 합니다.

npm ls <package-spec>

alias: list

C:\packageName>npm ls express
packageName@1.0.0 C:\packageName
`-- express@4.17.1

패키지명 없이 조회시 설치된 전체 리스트가 조회 됩니다.

C:\packageName>npm ls
packageName@1.0.0 C:\packageName>
+-- axios@0.19.2
| `-- follow-redirects@1.5.10
|   `-- debug@3.1.0
|     `-- ms@2.0.0 deduped
+-- body-parser@1.19.0
| +-- bytes@3.1.0
| +-- content-type@1.0.4
| +-- debug@2.6.9
| | `-- ms@2.0.0
| +-- depd@1.1.2
| +-- http-errors@1.7.2
| | +-- depd@1.1.2 deduped
| | +-- inherits@2.0.3
| | +-- setprototypeof@1.1.1 deduped
| | +-- statuses@1.5.0 deduped
| | `-- toidentifier@1.0.0
| +-- iconv-lite@0.4.24
| | `-- safer-buffer@2.1.2
| +-- on-finished@2.3.0
| | `-- ee-first@1.1.1
| +-- qs@6.7.0
| +-- raw-body@2.4.0
| | +-- bytes@3.1.0 deduped
| | +-- http-errors@1.7.2 deduped
| | +-- iconv-lite@0.4.24 deduped
| | `-- unpipe@1.0.0
| `-- type-is@1.6.18
|   +-- media-typer@0.3.0
|   `-- mime-types@2.1.26 deduped

` npm list -g –depth=0` 옵션을 추가해서 출력 표시 depth 선택 및 전역 범위 등을 선택 할 수 있습니다.

프로젝트 실행

npm start, stop, test

package.json 내의 scripts 영역의 명령을 실행 합니다.

npm start [-- <args>]

{
  "scripts": {
    "start": "node foo.js",
    "stop": "node bar.js",
    "test": "node test.js"
  }
}


npm restart

package.json 내의 scripts 에 restart 항목이 있을 경우 실행하며, restart가 없는 경우, stop,start를 실행 합니다.

npm restart [-- <args>]

npm run, run-script

package.json 내의 scripts 항목을 실행하는 명령어 입니다.
패키징을 위한 build 항목을 등록 해놓고 npm run build 등으로 특정 script 항목을 실행 할 수 있습니다.

npm run-script <command> [-- <args>]

aliases: run, rum, urn

기타

npm cache clean

npm에 설치 등에 오류가 발생될때 재설치를 위해 cache clean 등을 진행 합니다.
cache의 설치 위치는 Windows: %LocalAppData%\npm-cache, Posix: ~/.npm

npm cache add <package-spec>
npm cache clean [<key>]
npm cache ls [<name>@<version>]
npm cache verify

npm rebuild

cache clean으로 오류를 제거 후 재설치 등에 사용 합니다.

npm rebuild [<package-spec>] ...]

alias: rb

package 버전 명시 ^, ~ 등

package.json에는 설치 패키지 버전을 관리하기 위한 틸드(~) 또는 캐럿(^) 등의 표시가 있습니다.

  • 1.0.0
  • >1.1.0
  • >=1.1.0
  • <2.0.0
  • <=2.1.0
  • ~2.1.0

틸드(~)

버그 패치 등에 대한 업데이트 등, 사소한 변화에 대한 버전 업데이트를 허용하는 정책 입니다.
마지막 자리 내의 범위에서만 자동으로 업데이트한다.

  • ~0.0.1 : 0.0.1 <= 허용 < 0.1.0
  • ~0.1.1 : 0.1.1 <= 허용 < 0.2.0
  • ~0.1 : 0.1.0 <= 허용 < 0.2.0
  • ~0 : 0.0 <= 허용 < 1.0

캐럿(^)

Major 버전의 마지막 수준까지 업데이트를 허용한다.
동작의 하위호환성 부분에 이슈가 발생할 수 있으므로 주의가 필요합니다.

  • ^1.0.2 : 1.0.2 <= 허용 <2.0
  • ^1.0 : 1.0.0 <= 허용 <2.0
  • ^1 : 1.0.0 <= 허용 <2.0

기타 버전 설정

하기와 같이 명시적으로 버전을 명기 할 수 있습니다.

  • 1.0.0 특정 버전 이상으로 하위 버전 선을 명기 할 수 있습니다.
  • >1.0.0

package.json 예제

  "dependencies": {
    "axios": "^0.19.2",
    "body-parser": "^1.19.0",
    "cheerio": "^1.0.0-rc.3",
    "cookie-parser": "^1.4.4",
    "cors": "^2.8.5",
    "crypto": "^1.0.1",
    "ejs": "^3.0.1",
    "errorhandler": "^1.5.1",
    "express": "^4.17.1",
    "express-error-handler": "^1.1.0",
    "express-mysql-session": "^2.1.3",
    "express-session": "^1.17.0",
    "fs": "0.0.1-security",
    "url": "^0.11.0",
    "url-search-params-polyfill": "^8.1.0",
    "xml-escape": "^1.1.0",
    "xml2js": "^0.4.23"
  }