NPM (node package manager)
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"
}