Package.json / npm

김무연·2023년 12월 13일

Backend

목록 보기
31/49
post-thumbnail

npm이란?

Node Package Manager

  • 노드의 패키지 매니저
  • 즉 다른 사람들이 만든 소스 코드들을 모아둔 저장소
  • 남의 코드를 사용하여 프로그래밍 가능
  • 이미 있는 기능을 다시 구현할 필요가 없어 효율적
  • 오픈 소스 생태계를 구성중
  • 패키지: npm에 업로드된 노드 모듈
  • 모듈이 다른 모듈을 사용할 수 있듯 패키지도 다른 패키지를 사용할 수 있음
  • 의존 관계라고 부름

package.json

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

  • 노드 프로젝트 시작 전 package.json부터 만들고 시작함(npm init)
  • 같은 패키지라도 버전별로 기능이 다를 수 있으므로 버전을 기록해두어야 함
  • 동일한 버전을 설치하지 않으면 문제가 생길 수 있음
//package.json

{
  "name": "backendnodejs",
  "version": "1.0.0",
  "type": "module",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC"
}
  • package name: 패키지의 이름입니다. package.json의 name 속성에 저장됩니다.
  • version: 패키지의 버전입니다. npm의 버전은 다소 엄격하게 관리됩니다. 5.3절에서 다룹니다.
  • 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: 해당 패키지의 라이선스를 넣어주면 됩니다.
  • scripts : 터미널에 치는 명령어를 간단하게 별명을 붙여준 것

npm run test 하면 scripts에서 별명으로 붙여진 명령어가 실행이 됨

패키지 설치하기

npm install 설치할라이브러리이름, npm i 설치할라이브러리이름

package.json에 기록됨(dependencies에 설치할라이브러리 이름과 버전 추가됨)

npm i 라이브러리 -d 하면 devDependencies 에 설치가 됨, 왜 쓰냐면 배포해서 실행하기에는 필요없는 개발환경에서만 필요한 라이브러리들을 따로 분리해두는 것임

npm i 라이브러리 -g 하면 package.json에 기록은 안되면서 global로 설치가 되어버림, 따라서 node 처럼 명령어로 실행 가능한 라이브러리들이 주

하지만 package.json에 기록이 안되어, 담당자가 바뀔경우 문제가 생기게 됨, 따라서 이를 해결하고자, devDependencies에 설치한 후, npx로 실행 가능

ex) rimraf 명령어 => npx rimraf

node_modules

npm install 시 node_modules 폴더 생성

  • 내부에 설치한 패키지들이 들어 있음
  • express 외에도 express와 의존 관계가 있는 패키지들이 모두 설치됨
  • 라이브러리를 하나밖에 안 받았는데 node_modules에 여러 폴더가 많이 생긴 이유는 설치한 라이브러리의 dev, dep등의 필요한 라이브러리도 함께 설치되기 때문
  • 이 안에 설치된 라이브러리들은 git에 올리게 되면 많은 용량을 차지하므로 gitignore로 보통 무시해서 커밋함, 이후 다른사람이 다운 받을 때는 npm install 로그에 기록된 라이브러리들 다시 install

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

  • package.json에 설치된 라이브러리들의 의존 라이브러리 등이나 버전등을 상세하게 기록이 되어 있음

SemVer 버저닝

package.json의 설치된 라이브러리의 버전을 보면 x.x.x 로 세자리로 구분되어 있다 이를 SemVer방식(유의적 버저닝)이라고 한다.

  • Major(주 버전), Minor(부 버전), Patch(수 버전)
  • 노드에서는 배포를 할 때 항상 버전을 올려야 함
  • Major는 하위 버전과 호환되지 않은 수정 사항이 생겼을 때 올림
  • Minor는 하위 버전과 호환되는 수정 사항이 생겼을 때 올림
  • Patch는 기능에 버그를 해결했을 때 올림

버전 앞의 기호

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

기타 명령어

  • 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 deprecate [패키지명][버전] [메시지]: 패키지를 설치할 때 경고 메시지를 띄우게 함(오류가 있는 패키지에 적용)
  • npm publish: 자신이 만든 패키지를 배포
  • npm unpublish --force: 자신이 만든 패키지를 배포 중단(배포 후 24시간 내에만 가능)
  • 다른 사람이 내 패키지를 사용하고 있는데 배포가 중단되면 문제가 생기기 때문

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

npm 배포

package.json 파일이 있는곳으로 가서 npm publish 입력

배포 취소 npm unpublish 패키지명 --force 입력

profile
Notion에 정리된 공부한 글을 옮겨오는 중입니다... (진행중)

0개의 댓글