노알못 Node.js 정리: npm

Table of Content

이 글은 Node.js 교과서(조현영 저) 라는 책으로 공부한 내용을 정리한 글입니다.

package.json으로 패키지 관리

  • package.json 파일은 설치한 패키지의 버전을 관리하는 파일
  • 프로젝트를 시작하기 전에 package.json 파일을 만들고 시작하는 것이 좋음
  • package.json 파일을 만드는 명령어: npm init

패키지 정보

  • package name: 패키지 이름
  • version: 패키지 버전
  • entry point: 자바스크립트 실행 파일 진입점
  • test command: 테스트 명령어
  • git repository: Git 저장소 주소
  • keyword: https://npmjs.com 에서 사용할 패키지 검색어
  • license: 패키지 라이선스
    • ISC, MIT, BSD: 사용한 패키지와 라이선스만 밝혀주면 자유롭게 사용 가능
    • Apache: 패키지 사용은 자유롭지만 특허권 제한이 포함됨
    • GPL: 자신의 패키지도 GPL도 배포하고 소스코드도 공개해야 함

scripts

  • 생성된 package.json 파일 내 scripts 부분은 npm 명령어를 저장해두는 부분
  • 콘솔에서 npm run [SCRIPT_COMMAND]를 입력하면 해당 스크립트가 실행됨
    "scripts": {
    "test": "echo 'Hello World!'",
    "start": "echo 'Start!'",
    "hello": "echo '안녕요?ㅎ'"
    }
    • scripts의 test 부분은 npm test 또는 npm run test 명령어로 실행할 명령어 지정
    • scripts의 start 부분도 npm start 또는 npm run start 명령어로 실행할 명령어 지정
    • scripts의 hello 부분은 npm run hello 명령어로 실행할 명령어 지정

패키지 설치

  • 패키지를 설치 명령어: npm install [PACKAGE_NAME]
  • 여러 패키지 설치하 명령어: npm install [PACKAGE_NAME_1] [PACKAGE_NAME_2] ... [PACKAGE_NAME_n]

패키지 설치 시 생성되는 폴더 및 파일

  • node_modules: 설치된 패키지가 저장된 폴더
  • package.json: 설치한 패키지의 버전(의존성)이 dependencies 속성에 저장됨
  • package-lock.json: 패키지를 설치, 수정, 삭제할 때마다 내부 의존 관계 정보가 저장되는 파일
  • node_modules 폴더를 날려도 package.json 파일과 package-lock.json 파일이 남아 있는 경우 npm install 명령어를 실행하면 패키지가 다시 설치됨
    • node_modules 폴더는 따로 보관할 필요가 없음.
    • Git에서도 node_modules 폴더는 커밋하지 않음

npm에 등록되지 않은 패키지 설치

명령어: npm install [URL]

개발용 패키지 설치

  • 실제 배포 시에는 사용하지 않는 개발용 패키지 설치 명령어: npm install --save-dev [PACKAGE_NAME] 명령어로 설치합니다.
  • 이렇게 설치된 패키지는 package.json 파일의 devDependencies 속성에 패키지의 버전(의존성)이 저장됨

패키지 전역 설치

  • 명령어: npm install --global [PACKAGE_NAME]
  • 패키지를 node_modules 폴더에 설치하는 것이 아님
  • npm이 설치되어 있는 폴더에 전역 설치
  • 이 경우 콘솔 커맨드로 사용할 수 있음
  • 전역 설치한 패키지는 package.json 파일에 기록되지 않음
    • 패키지를 다시 설치할 때 어려움이 따를 수 있음

명령어 줄여 쓰기

  • npm install -> npm i
  • --save-dev -> -D
  • --global -> -g

패키지 버전

  • 모든 노드 패키지들은 세 자리로 이루어진 SemVer(Semantic Versioning, 유의적 버전)을 따름
  • SemVer의 구성: major.minor.patch

major 버전

  • 하위 호환이 안 될 정도로 패키지가 수정되었을 때 바뀜
  • 주로 0이면 초기 개발 중, 1부터는 정식 버전
  • 예: 1.5.0 버전 -> 2.0.0 버전
    • 1.5.0 버전 패키지 사용자들이 2.0.0 버전으로 업데이트 했을 때 에러가 발생할 확률이 큼

minor 버전

  • 하위 호환이 되는 기능 업데이트 시 바뀜
  • 예: 1.5.0 버전 -> 1.6.0 버전
    • 패키지 업데이트 시 기능적으로 아무 문제가 없어야 함

patch 버전

기존 기능에 문제가 있어 패키지를 수정했을 때 바뀜

기호

  • package.json 파일 내에 명시된 ^, ~, >, <같은 기호는 패키지 설치 또는 업데이트 시 어떤 버전을 설치해야 하는지를 명시
    • ^는 minor 버전까지만 설치 또는 업데이트
    • 예: ^1.1.1은 1.x.x 버전을 설치. 2.0.0 이상의 버전은 설치하지 않음.
    • ~는 patch 버전까지만 설치 또는 업데이트
    • 예: ~1.1.1은 1.1.x 버전을 설치. 1.2.0 이상의 버전은 설치하지 않음.
    • 부등호 기호>, <, >=, <=, =는 초과, 미만, 이상, 이하, 동일.
    • 예: >1.1.1은 1.1.1 버전보다 높은 버전을 설치.
  • ~보다 ^가 많이 사용됨
    • minor 버전까지는 하위 호환이 보장되기 때문
  • @latest 또는 @x: 항상 최신 버전의 패키지를 설치할 것을 명시
    • 예: npm i express@latest 또는 npm i express@x

기타 npm 명령어

업데이트할 수 있는 패키지 확인

npm outdated

  • Current와 Wanted가 다르면 업데이트가 필요한 경우임

패키지 제거

npm uninstall [PACKAGE_NAME] 또는 npm rm [PACKAGE_NAME]

  • 이 때 패키지가 node_modules 폴더와 package.json 파일에서 사라짐

npm 패키지 검색

npm search [SEARCH_WORD]

  • package.json의 keywords 속성이 여기에 사용됨

npm 로그인

npm adduser

  • 패키지를 배포할 때 사용
  • 사전에 npm 공식 사이트에서 계정을 생성해야 함

로그인한 사용자 확인

npm whoami

로그아웃

npm logout

package.json 파일의 버전 올리기

npm version [VERSION]

  • 예: 패키지 버전을 5.3.2로 설정: npm version 5.3.2
  • minor 버전 하나 올리기: npm version minor

해당 패키지를 설치할 때 경고 메시지를 띄우게 하기

npm deprecate [PACKAGE_NAME][VERSION] 입니다.

  • 자신의 패키지에만 이 명령어를 적용할 수 있음

패키지 배포

npm publish

배포한 패키지 제거

npm unpublish

  • 의존성 관계 때문에 24시간 이내에 배포한 패키지만 제거 가능

이 외의 명령어

http://docs.npmjs.com의 CLI Commands 참고

댓글 남기기