melius
[Node.js] Package manager 본문
https://docs.npmjs.com/about-npm
npm은 Node.js용 패키지 관리자(Package manager)로서, 세계에서 가장 큰 소프트웨어 등록소(Registry)이다.
패키지와 모듈
https://docs.npmjs.com/about-packages-and-modules
패키지(Package)는 package.json 파일에 의해서 서술되는 파일이나 폴더이다. 모듈(Module)은 Node.js의 require 함수로 읽어들일 수 있는 파일이나 폴더이다. 모듈은 package.json 파일을 필수적으로 가질 필요는 없으므로 모든 모듈이 패지키는 아니지만, 패키지는 package.json 파일의 main 항목을 통해서 require 함수로 읽어들일 수 있으므로 모든 패키지는 모듈이다. npm에 모듈을 등록하려면 package.json 파일이 있어야 하므로 npm에 등록된 모듈은 모두 패키지다.
package.json
https://docs.npmjs.com/creating-a-package-json-file
패키지를 만들기 위해서 처음 package.json를 만든다. package.json 파일은 패키지의 설치와 관리를 용이하게 해준다. npm은 다양한 CLI를 제공하는데, 프로젝트를 시작하고자 하는 폴더에서 아래 명령어로 패키지를 초기화 시키면 package.json 파일이 생성된다.
https://docs.npmjs.com/cli/v7/commands/npm-init
$ npm init
package.json 파일에는 해당 패키지의 주요정보들이 작성되어 있다.
- version: semantic versioning을 적용해서 패키지의 버전을 특정
- main: 패키지의 진입점으로, 다른 모듈에서 require 함수로 읽어들일 수 있게 최종적으로 module.exports가 구현된 파일
- dependencies/devDependencies: 패키지가 종속된 다른 패키지들의 리스트
- scripts: 명령어를 저장해 두는 부분
- keywords: 패키지 검색시에 사용되는 키워드
패키지 검색
개발중인 프로젝트에 외부 패키지를 이용하려면 해당 패키지를 설치 해야한다. npm을 이용하여 패키지 검색, 설치, 삭제가 가능하다. 아래의 명령어을 이용하면 키워드를 이용하여 관련 패키지 검색한다. package.json의 name, description, keywords 항목 등에 해당 키워드가 있다면 검색항목에 나타난다.
https://docs.npmjs.com/cli/v7/commands/npm-search
$ npm search [keyword]
패키지의 정보를 확인하는 명령어는 아래와 같다.
https://docs.npmjs.com/cli/v6/commands/npm-view
$ npm view [package-name]
패키지 설치
설치하고자 하는 패키지명을 확인했다면, npm 명령어를 이용하여 해당 패키지를 설치할 수 있다.
https://docs.npmjs.com/cli/v6/commands/npm-install
$ npm install [package-name] // dependencies 항목에 등록
$ npm install -D [package-name] // devDependencies 항목에 등록 (개발시 필요한 모듈)
$ npm install -g [package-name] // 전역설치
해당 패키지는 프로젝트 root 폴더 하위의 node_modules 폴더에 설치(전역설치는 제외)되며, 이렇게 설치된 패키지는 package.json의 dependencies 항목(-D 옵션을 넣은 패키지는 devDependencies)에 기록된다. node_modules 폴더를 삭제해도, package.json에 패키지 정보가 남아 있으므로, 아래 명령으로 package.json에 기록된 모든 패키지를 한번에 설치할 수 있다.
$ npm install
$ npm install --only=dev|development // 개발 모듈만 설치 (devDependencies 항목)
$ npm install --only=prod|production // 개발 모듈만 설치제외 (dependencies 항목)
$ npm install --prod|production
$ npm ci // Install a project with a clean slate, https://docs.npmjs.com/cli/v7/commands/npm-ci
설치된 패키지 확인 및 삭제
설치한 패키지 리스트는 아래 명령으로 확인가능하다.
https://docs.npmjs.com/cli/v6/commands/npm-ls
$ npm ls --depth=0
전역설치한 패키지의 설치위치와 리스트를 확인하는 명령어는 아래와 같다.
https://docs.npmjs.com/cli/v6/commands/npm-root
$ npm root -g
$ npm ls -g --depth=0
설치된 패키지의 새로운 버전이 배포되었는지 확인하기 위한 명령은 아래와 같다.
https://docs.npmjs.com/cli/v6/commands/npm-outdated
$ npm outdated
패키지 버전을 갱신하기 위한 명령어는 아래와 같다.
https://docs.npmjs.com/cli/v6/commands/npm-update
$ npm update [package-name]
$ npm update // 모두 갱신한다.
아래 명령은 패키지를 삭제한다.
https://docs.npmjs.com/cli/v6/commands/npm-uninstall
$ npm uninstall [package-name]
Script
https://docs.npmjs.com/cli/v7/using-npm/scripts
https://docs.npmjs.com/cli/v7/commands/npm-run-script
package.json의 scripts 항목을 이용하면 프로젝트 빌드나 실행시에 복잡한 명령어를 한번에 실행할 수 있다. 아래와 같이 사용하고자 하는 Script를 등록하면 된다.
{
"scripts": {
"myscript": "node app.js",
}
}
이렇게 등록된 Script는 터미널창에서 아래와 같이 실행할 수 있다.
$ npm run myscript
Pre Script와 Post Script를 이용하면 순차적으로 실행해야할 Script를 한번의 명령어로 실행가능하다.
{
"scripts": {
"premyscript": "echo \"this is prescript\" && node build.js",
"myscript": "node app.js",
"postmyscript": "echo \"this is postscript\" && dir /w"
}
}
Semantic Versioning
https://docs.npmjs.com/about-semantic-versioning
npm에 등록된 모든 패키지는 패키지 사용자들을 위해서 Semantic versioning spec.을 따라야 한다. 버전 표기는 아래와 같이 3개의 숫자로 구성되며, 특별한 룰에 의해서 각 숫자를 증가 시켜야 한다.
1.0.0 - New product // 첫번째 정식판 배포
1.0.1 - Patch release // 버그 수정, 하위버전 호환 가능
1.1.0 - Minor release // 새로운 기능 추가, 하위버전 호화 가능
2.0.0 - Major release // 하위버전 호환이 불가능한 큰 변화
패키지 버전과 관련된 특별한 의미가 부여된 문자를 사용하면 패키지 설치시에 유용하다.
$ npm install [package-name]@1.2.3 // 특정 버전 설치
$ npm install [package-name]@^1.2.3 // 특정 버전과 비교하여 최신 Minor 버전 설치 (ex 1.9.0)
$ npm install [package-name]@~1.2.3 // 특정 버전과 비교하여 최신 Patch 버전 설치 (ex 1.2.8)
$ npm install [package-name]@>1.2.3 // 특정 버전보다 높은 최신 버전 설치
$ npm install [package-name]@latest // 안정된 최신 버전 설치
$ npm install [package-name]@next // 최신 버전 설치
package.json의 dependencies 항목의 설치 패키지의 버전표기에 사용된다.
패키지 배포
npm CLI를 개발한 패키지를 npm에 배포할 수 있다. 배포를 위해서 우선 npm에 로그인을 해야한다.
$ npm adduser // npm 로그인
$ npm whoami // 로그인된 사용자 확인
$ npm logout // npm 로그아웃
아래 명령어로 npm에 패키지를 배포한다.
https://docs.npmjs.com/cli/v6/commands/npm-publish
$ npm publish
패키지 배포시에 npm에 이미 같은 이름의 패키지명이 있다면, 배포가 되지 않는다. 이런 경우는 다른 이름을 사용하거나 스코프를 이용하여 배포할 수 있다.
https://docs.npmjs.com/cli/v7/using-npm/scope
배포한 패키지를 배포 취소하려면 아래 명령어를 이용한다.
https://docs.npmjs.com/cli/v7/commands/npm-unpublish
$ npm unpublish [package-name] --force
패키지 버전을 변경한다.
$ npm version [{version}|major|minor|patch]
패키지 특정 버전을 deprecate 한다.
$ npm deprecate [package-name] [version] [message]
npx
https://www.npmjs.com/package/npx
https://www.freecodecamp.org/news/npm-vs-npx-whats-the-difference
npm에 등록된 패키지중에는 터미널창에 직접 명령어를 입력하는 Command-line 패키지들이 있다. React앱을 쉽게 시작할 수 있게 Boilerplate 코드를 제공해주는 create-react-app 패키지가 대표적인 예이다. 보통 이러한 Command-line 패키지는 전역으로 설치해서 사용한다. 로컬 프로젝트 폴더에 설치한 뒤에 사용하려면 실행경로를 적어주어야 한다.
$ ./node_modules/.bin/[package-name]
로컬의 설치된 패키지를 경로지정없이 사용하기 위해 npx를 사용할 수 있다.
$ npx [package-name]
npx는 환경변수 PATH에 등록된 경로와 로컬 node_modules/.bin 폴더를 검색하여 Command-line 패키지를 실행한다. 만약 설치되어 있지 않다면, Command-line 패키지를 실행하기 위해 필요한 모든 패키지를 Central Cache에 설치하여 실행한다. npm의 Cache는 아래 명령으로 확인할 수 있으며, npx의 Cache는 npm cache의 하위폴더에 존재한다.
$ npm config get cache
{userid}\AppData\Roaming\npm-cache // npm cache path
// npx cache path
// {userid}\AppData\Roaming\npm-cache\_npx
npm cache를 모두 지우는 명령은 아래와 같다.https://docs.npmjs.com/cli/v7/commands/npm-cache
https://docs.npmjs.com/cli/v7/commands/npm-cache
$ npm cache clean --force
$ npm cache verify
'Node.js' 카테고리의 다른 글
[Node.js] Addons (0) | 2021.03.08 |
---|---|
[Node.js] JavaScript Runtime Environment (0) | 2021.02.27 |
[Node.js] Worker Threads (0) | 2020.02.04 |
[Node.js] FormData 객체 전송 (0) | 2020.01.29 |
[Node.js] HTTPS 로컬 서버 구축 (0) | 2020.01.29 |