5.1 npm 알아보기
[ npm ]
npm은 Node Package Manger의 약어로 이름 그대로 노드 패키지 매니저를 의미한다.
대부분의 자바스크립트 프로그램은 패키지라는 이름으로 npm에 등록되어 있으므로 특정 기능을 하는 패키지가 필요하다면 npm에서 찾아 설치하면 된다.
npm에 업로드된 노드 모듈을 패키지라고 부른다.
패키지가 다른 패키지를 사용할 수 있는데 이런 관계를 의존 관계라고 한다.
[ yarn, pnpm ]
npm의 대체자로 yarn과 pnpm이 있다.
yarn은 페이스북이 내놓은 패키지 매니저로 리액트나 리액트 네이티브 같은 페이스북 진영의 프레임워크를 사용할 때 종종 볼 수 있다.
pnpm은 npm의 성능을 개선한 패키지 매니저이다.
5.2 package.json으로 패키지 관리하기
package.json은 설치한 패키지의 버전을 관리하는 파일이다.
노드 프로젝트를 시작하기 전에는 폴더 내부에 무조건 package.json부터 만들고 시작해야 한다.
npm은 package.json을 만드는 명령어를 제공한다.
[npm으로 package.json 만들기]
- package name: (폴더명) 패키지의 이름이다.
- version: (1.0.0) 패키지의 버전이다.
- description: 프로젝트 설명 입력
- entry point: 자바스크립트 실행 파일 진입점이다. 보통 마지막으로 module.exports를 하는 파일을 지정합니다.
- test command: 코드를 테스트할 때 입력할 명령어를 의미한다.
- git repository: 코드를 저장해둔 git 저장소 주소를 의미한다.
- keywords: 키워드는 npm 공식 홈페이지에서 패키지를 쉽게 찾을 수 있게 한다.
- author: [이름 입력]
- license: (ISC) 해당 패키지의 라이선스를 넣으면 된다. (라이선스 별로 제한 사항이 있으므로 설치 전에 라이선스를 확인해야 한다.)
// pachages.json
{
"name": "gun",
"version": "1.0.0",
"description": "hello haho",
"main": "index.js",
"scripts": {
"test": "good"
},
"author": "haho",
"license": "ISC"
}
script 부분은 npm 명령어를 저장해두는 부분이다.
콘솔에서 npm run [스크립트 명령어]를 입력하면 해당 스크립트가 실행된다.
gun@1.0.0은 gun 패키지의 1.0.0 버전을 의미한다.
보통 start 명령어에 node [파일명]을 저장해두고 npm start로 실행한다.
start나 test 같은 스크립트는 run을 붙이지 않아도 실행된다.
[Express 패키지]
npm install [패키지 이름]을 package.json이 있는 폴더의 콘솔에서 입력하면 된다.
* --save 옵션은 dependencies에 패키지 이름을 추가하는 옵션이지만 npm@5부터는 기본값으로 설정되어 있으므로 따로 붙이지 않아도 된다.
* 프로젝트 이름과 패키지의 이름이 겹치면 안된다.
node_modules
해당 폴더에는 여러 개의 패키지가 들어 있다. 이는 Express가 의존하는 패키지들이다.
패키지 하나가 다른 여러 패키지에 의존하고, 그 패키지들은 또 다른 패키지에 의존한다.
이렇게 의존 관계가 복잡하게 얽혀 있어 package.json이 필요하다.
언제든지 npm install 할 수 있어 git을 사용할 때 커밋하지 않는다.
package-lock.json
패키지 간의 의존 관계를 명시하는 파일이다.
[다양한 패키지 설치]
npm install [패키지1], [패키지2], [패키지3]와 같이 패키지들을 나열하면 된다.
설치된 패키지들은 dependencies 속성에 기록된다.
// package.json
{
"name": "gun",
...
"dependencies": {
"cookie-parser": "^1.4.6",
"express": "^4.18.2",
"express-session": "^1.18.0",
"morgan": "^1.10.0"
}
}
npm install --save-dev [패키지] [...] : 개발자용 패키지를 설치한다.
devDependencies이라는 속성이 생긴다.
이 속성은 개발용 패키지들만 따로 관리한다.
// package.json
{
...
"devDependencies": {
"nodemon": "^2.0.16"
}
}
- npm i --force: 강제로 패키지를 설치한다.
- npm i --legacy-peer-deps: peerDenpendencies를 무시한다.
npm install --global [패키지]
npm에는 전역 설치라는 옵션이 있다.
패키지를 현재 폴더에 설치하는 것이 아닌 npm이 설치되어 있는 폴더에 설치한다.
Window(C:\Users\사용자명\AppData\Roamming\npm)
MAC(/usr/local/lib/node_modules)
rimarf
rimraf는 리눅스나 맥의 rm -rf명령을 윈도에서 사용할 수 있게 해주는 패키지이다.
rm -rf는 지정한 파일이나 폴더를 지우는 명령이다.
* 윈도에서 cmd 대신 파워쉘을 사용할 때는 npx를 앞에 붙인다. npx rimraf ...
[npx]
npm 레지스트리에 있는 패키지를 더 쉽게 설치하고 관리하도록 도와주는 CLI(Command-line interface) 도구이다.
전역 설치한 패키지는 package.json에 기록되지 않아 다시 설치할 때 어려움이 있어 npx 명령어를 사용한다.
ex) $ npx reimaraf node_modules
5.3 패키지 버전 이해하기
[SebVer]
SemVer는 Semantic Versioning의 약어로 버전을 구성하는 세자리가 모두 의미를 갖고 있다는 뜻이다.
첫 번째 자리: 메이저 버전, 0이면 초기 개발, 1부터는 정식 버전을 의미한다.
메이저 버전은 하위 호환이 안될 정도로 패키지의 내용이 수정되었을 때 올린다.
ex) 1.5.0에서 2.0.0으로 올린 것은 1.5.0 버전을 사용하는 사람들이 2.0.0으로 업데이트 했을 때 에러 발생확률이 크다는 뜻
두 번째 자리: 마이너 버전이다.
마이너 버전은 하위 호환이 되는 기능 업데이트를 할 때 올린다.
ex) 1.5.0에서 1.6.0으로 올렸다면 1.5.0 사용자가 1.6.0으로 업데이트 했을 때 아무런 문제가 없어야 한다.
세 번째 자리: 패치 버전
새로운 기능이 추가되었다기 보다는 기존 기능에 문제가 있어 수정한 것을 내놓았을 때 패치 버전을 올린다.
ex) 1.5.0에서 1.5.1으로 올릴 때 당연히 업데이트 후 아무런 문제가 없어야 한다.
* 새 버전을 배포한 후 그 버전의 내용을 절대 수정하면 안된다.
* 다른 패키지를 사용할 때 버전만 보고 에러 발생 여부를 가늠할 수 있다.
^ 기호: 마이너 버전까지만 설치하거나 업데이트 한다.
ex) express@^ 1.1.1이면 1.1.1 이상부터 2.0.0 미만 버전까지 설치된다.
~ 기호: 패치 버전까지만 설치하거나 업데이트 한다.
~보다 ^가 많이 사용되는 이유는 마이너 버전까지 하위 호환이 보장되기 때문이다.
ex) npm i express@~1.1.1이라면 1.1.1 이상부터 1.2.0 미만 버전까지 설치된다.
>, <, > =, < =, =은 알기 쉽게 초과, 미만, 이상, 이하, 동일을 뜻한다.
@lastest는 안정된 최신 버전의 패키지를 설치한다.
@next를 사용하면 가장 최근 배포판을 사용할 수 있다.
5.4 기타 npm 명령어
npm outdated: 업데이트할 수 있는 패키지가 있는지 확인한다.
npm update [패키지 이름]: 업데이트 가능한 모든 패키지가 Wanted에 적힌 버전으로 업데이트 된다.
npm uninstall [패키지 이름]: 해당 패키지를 제거하는 명령어이다. (== npm rm [패키지 이름])
npm search [검색어] : npm의 패키지를 검색할 수 있다.
npm info [패키지 이름]: 패키지의 세부 정보를 파악하고자 할 때 사용하는 명령어이다.
npm login: npm 로그인을 위한 명령어이다.
npm whoami: 로그인한 사용자가 누구인지 알린다.
npm logout: 로그인한 npm 계정을 로그아웃한다.
npm version [버전]: package.json의 명령어를 올린다.
npm deprecate [패키지 이름] [버전] [메시지]: 해당 패키지를 설치할 때 경고 메시지를 띄우게 하는 명령어이다.
npm pulish: 자신이 만든 패키지를 배포할 때 사용한다.
npm unpublish: 배포한 패키지를 제거할 때 사용한다.
'Programming > NodeJS' 카테고리의 다른 글
Node.js 교과서 [MySQL] #7 (1) | 2024.02.17 |
---|---|
Node.js 교과서 [Express, Middleware, Route, 템플릿 엔진] #6 (1) | 2024.02.11 |
Node.js 교과서 [요청과 응답] #4 (1) | 2024.02.04 |
Node.js 교과서 [이벤트, 예외 처리] #3.4 (0) | 2024.02.04 |
Node.js 교과서 [파일 시스템] #3.3 (0) | 2024.02.04 |