모각코/2024 동계 [뉴진주택]

[뉴진주택] 5. 패키지 매니저

Su_Do 2024. 1. 13. 18:58

5.1 npm 알아보기

5.1.1 npm 이란

Node Package Manager

=> 노드의 패키지 매니저

=> 다른 사람들이 만든 소스 코드들을 모아둔 장소 (남의 코드를 사용하여 프로그래밍 가능)

=> 이미 있는 기능을 다시 구현할 필요가 없어 효율적

=> 오픈 소스 생태계를 구성중

 

패키지 : npm에 업로드 된 노드 모듈

=> 모듈이 다른 모듈을 사용할 수 있듯이 패키지도 다른 패키지를 사용할 수 있음 (의존 관계)

5.2 package.json으로 패키지 관리하기

5.2.1 package.json

현재 프로젝트에 대한 정보와 사용 중인 패키지에 대한 정보를 담은 파일

=> 같은 패키지라도 버전별로 기능이 다를 수 있으므로 버전을 기록해두어야 함

=> 동일한 버전을 설치하지 않으면 문제가 생길 수 있음

=> 노드 프로젝트 시작 전 package.json부터 만들고 시작함 (npm init)

5.2.2 package.json 속성들

package name 패키지의 이름
package.json의 name 속성에 저장됨
version 패키지의 버전
npm의 버전은 다소 엄격하게 관리됨
entry point 자바스크립트 실행 파일 진입점
보통 마지막으로 module.exports를 하는 파일을 지정함
package.json의 main 속성에 저장됨
test command 코드를 테스트할 때 입력할 명령어
package.json의 scripts 속성 안의 test 속성에 저장됨
git repository 코드를 저장해둔 Git 저장소 주소
나중에 소스에 문제가 생겼을 때 사용자들이 이 저장소에 방문해 문제를 제기할 수 있고, 코드 수정본을 올릴 수도 있음
package.json의 repository 속성에 저장됨
keywords npm 공식 홈페이지(https://npmjs.com)에서 패키지를 쉽게 찾을 수 있게 해줌
package.json의 keywords 속성에 저장됨
license 해당 패키지의 라이센스를 넣어주면 됨

5.2.3 npm 스크립트

npm init이 완료되면 폴더에 package.json이 생성됨

 

npm run [스크립트명]으로 스크립트 실행

5.2.4 패키지 설치하기

express 설치하기 (npm install express)

 

package.json에 기록됨 (dependencies에 express 이름과 버전이 추가됨)

5.2.5 node_modules

npm install 시 node_modules 폴더 생성

=> 내부에 설치한 패키지들이 들어 있음

=> express 외에도 express와 의존 관계가 있는 패키지들이 모두 설치됨

 

pacakge-lock.json도 생성되어 패키지 간 의존 관계를 명확하게 표시함

5.2.6 여러 패키지 동시 설치하기

npm install 패키지1 패키지2 패키지3 ...

ex) npm install morgan cookie-parser express-session

5.2.7 개발용 패키지

npm install --save-dev 패키지명 또는 npm i -D 패키지명

=> pacakge.json의 devDependencies 속성에 추가됨

5.2.8 Peer Dependencies

A 라이브러리의 peerDependecies가 다음과 같은 경우

=> A 라이브러리는 jQuery@3이 설치되었다고 간주하고 코딩한 것

ERESOLVE unable to resolve dependecy tree

=> npm i --force로 모든 버전 설치하기

=> npm i --legacy-peer-deps로 peerDependencies 무시하기

5.2.9 npm ci

· npm i를 할 때마다 package.json과 package-lock.json이 변할 수 있음

=> 배포 시에는 npm ci로 배포하기

 

· node_modules는 git 같은 버전 관리 시스템에 커밋할 필요가 없음

=> npm i나 npm ci를 하면 동일하게 복구됨

5.2.10 글로벌(전역) 패키지

npm install --global 패키지명 또는 npm i -g 패키지명

=> 모든 프로젝트와 콘솔에서 패키지를 사용할 수 있음

=> npx로 글로벌 설치 없이 글로벌 명령어 사용 가능

5.3 패키지 버전 이해하기

5.3.1 SemVer 버저닝

노드 패키지의 버전은 SemVer(유의적 버저닝) 방식을 따름

=> Major(주 버전), Minor(부 버전), Patch(수 버전)

노드에서 배포를 할 때 항상 버전을 올려야 함

5.3.2 버전 기호 사용하기

버전 앞에 기호를 붙여 의미를 더함

^1.1.1 패키지 업데이트 시 minor 버전까지만 업데이트 됨
(2.0.0 버전은 안 됨)
~1.1.1 패키지 업데이트 시 patch 버전까지만 업데이트 됨
(1.2.0 버전은 안 됨)
>=, <=, >, < 이상, 이하, 초과, 미만
@latest 최신 버전을 설치하라는 의미
@next 실험적인 버전이 존재한다면 설치 (불안정함)
1.1.1-alpha.0
2.0.0-beta.1
2.0.0-rc.0
각 버전마다 부가적으로 알파/베타/RC 버전이 존재할 수도 있음

5.4 기타 npm 명령어

npm outdated 어떤 패키지에 기능 변화가 생겼는지 알 수 있음
npm update package.json에 따라 패키지 업데이트
npm uninstall 패키지명 패키지 삭제 (npm rm 패키지명으로도 가능)
npm search 검색어 npm 패키지를 검색할 수 있음 (npmjs.com에서도 가능)
npm info 패키지명 패키지의 세부 정보 파악 가능
npm login npm에 로그인 하기 위한 명령어 (npmjs.com에서 회원가입 필요)
npm whoami 현재 사용자가 누구인지 알려줌
npm logout 로그인한 계정을 로그아웃
npm version 버전 package.json의 버전을 올림 (Git에 커밋도 함)

npm version 1.1.1 (1.1.1로 만들어줌)
npm version major (메이저를 하나 올려줌)
npm version minor (마이너를 하나 올려줌)
npm version patch (패치를 하나 올려줌)
npm deprecate [패키지명][버전] [메시지] 패키지를 설치할 때 경고 메시지를 띄우게 함 (오류가 있는 패키지를 적용)
npm publish 자신이 만든 패키지를 배포
npm unpublish --force 자신이 만든 패키지를 배포 중단 (배포 후 24시간 내에만 가능)

기타 명령어는 https://docs.npmjs.com의 CLI Commands에서 확인

5.5 패키지 배포하기

5.5.1 npm 회원가입

https://www.npmjs.com에 접속해서 회원가입

5.5.2 배포할 패키지 작성

package.json과 main 부분과 배포할 파일 경로명이 일치해야 함

5.5.3 배포 시도하기

npm publish 입력

5.5.4 버전 올리기

버전을 올리지 않으면 E403 에러

=> npm version 명령어로 버전 올리기

5.5.5 배포 취소하기

24시간 내에 npm unpublish 패키지명 --force 입력