본문 바로가기

ComputerScience/NodeJs

node - 5 Package Manager

728x90
 

더북(TheBook): Node.js 교과서 개정 2판

 

thebook.io

* 위 내용을 정리하였음

- 세상에 무수히 많은 자바스크립트 개발자들이 만들어 놓은 모듈들을 사용해본다.

- 그 코드들이 공개되어 있는 서버인 npm(패키지 매니저)에 대해 알아본다.

5.1 npm 알아보기

- node package manager

- 특정 기능이 필요하다면 npm에서 찾아서 다운로드 하여 사용하면 된다.

- npm에 업로드된 모듈들을 패키지라고 한다.

- yarn은 메타(페이스북)에서 내놓은 패키지 매니저이다. (npm의 대체재)

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

- 프로젝트에 사용되는 패키지들의 버전을 관리하는 파일이다.

- 무조건 먼저 만들고 시작하자.

- npm init으로 생성한다. 과정은 아래를 참조하라.

$ npm init
This utility will walk you through creating a package.json file.
It only covers the most common items, and tries to guess sensible defaults.

See `npm help json` for definitive documentation on these fields and exactly what they do.

Use `npm install <pkg>` afterwards to install a package and save it as a dependency in the package.json file.

Press ^C at any time to quit.
package name: (폴더명) [프로젝트 이름 입력]
version: (1.0.0) [프로젝트 버전 입력]
description: [프로젝트 설명 입력]
entry point: index.js
test command: [엔터 키 클릭]
git repository: [엔터 키 클릭]
keywords: [엔터 키 클릭]
author: [여러분의 이름 입력]
license: (ISC) [엔터 키 클릭]
About to write to C:\Users\zerocho\npmtest\package.json:

{
  "name": "npmtest",
  "version": "0.0.1",
  "description": "hello package.json",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "ZeroCho",
  "license": "ISC"
}

Is this ok? (yes) yes
  • package name: 패키지의 이름
  • version: 패키지의 버전
  • entry point: 자바스크립트 실행 파일 진입점
  • test command: 코드를 테스트할 때 입력할 명령어
  • git repository: 코드를 저장해둔 깃(Git) 저장소 주소. 나중에 소스에 문제가 생겼을 때 사용자들이 이 저장소에 방문해 문제를 제기할 수도 있고, 코드 수정본을 올릴 수도 있다.
  • keywords: 키워드는 npm 공식 홈페이지(https://npmjs.com)에서 패키지를 쉽게 찾을 수 있도록 해준다.
  • license: 해당 패키지의 라이선스
  • scripts : npm run [스크립트 명령어, ex)test ]를 입력하면 해당 스크립트가 실행된다.

- 오픈 소스라고 제약 없이 해당 패키지를 사용할 수 있지는 않다. license별로 제한 사항을 확인해야 한다.

- ISC, MIT나 BSD 라이선스를 가진 패키지를 사용할 때는 사용한 패키지와 라이선스만 밝히면 자유롭게 사용할 수 있다.

- 아파치 라이선스 패키지는 사용은 자유롭지만 특허권에 대한 제한이 포함되어 있다.

- GPL 계열의 패키지를 사용한 패키지를 배포할 때는 자신의 패키지도 GPL로 배포하고 소스 코드도 공개해야 한다.

npm install express

- 새로운 패키지를 다운로드 해보자.

{
  "name": "practice",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "express": "4.17.2"
  }
}

- 설치를 완료하면 위처럼 node_modules가 설치된다.

- package.json만 있으면 npm install했을 때 알아서 모두 설치가 된다. 따라서 node_modules가 없어도 얼마든지 복구가 가능하다.

- 이는 express 패키지 뿐만 아니라 express가 의존하는 패키지들이 들어있다.

- package-lock.json도 만들어졌다. 여기에는 node_modules에 들어 있는 패키지들의 정확한 버전과 의존 관계가 담겨있다.

npm install --save-dev nodemon

- --save-dev 옵션은 실제 배포 시에는 사용되지 않고 개발 중에만 사용하는 개발용 패키지를 설치할 때의 옵션이다.

- nodemon은 소스가 바뀌었을때 자동으로 노드를 재실행 해주는 패키지이다.

- 개발용 패키지는 package.json에서 따로 항목으로 관리된다.

$ npm install --save-dev rimraf
$ npx rimraf node_modules

- rimraf 패키지를 --save-dev 옵션으로 설치하고 실행할때는 npx로 실행하면 패키지를 전역 설치한 것과 같은 효과(명령어로 사용 가능)를 얻을 수 있다.

5.3 패키지 버전 이해하기

- 노드의 패키지들은 SemVer(Semantic Versioning, 유의적 버전)을 따른다.

- major 버전이 0이면 초기 개발 중. 1부터는 정식 버전을 의미한다

- major 버전은 하위 호환이 안 될 정도로 패키지의 내용이 수정되었을 때 올린다.

- 예를 들어, 1.5.0에서 2.0.0으로 올렸다는 것은 1.5.0 버전 패키지를 사용하고 있던 사람들이 2.0.0으로 업데이트했을 때 에러가 발생할 확률이 크다는 뜻이다.

 

- minor 버전은 하위 호환이 되는 기능 업데이트를 할 때 올린다.

- 버전을 1.5.0에서 1.6.0으로 올렸다면, 1.5.0 사용자가 1.6.0으로 업데이트했을 때 아무 문제가 없어야 한다.

 

- 새로운 기능이 추가되었다기보다는 기존 기능에 문제가 있어 수정한 것을 내놓았을 때 patch 버전을 올린다. 당연히 업데이트 후 아무 문제가 없어야 한다.

 
npm i express@^1.1.1

- 1.1.1 이상부터 2.0.0 미만 버전까지 설치된다. (1.x.x)

npm i express@~1.1.1

- 1.1.1 이상부터 1.2.0 미만 버전까지 (patch 버전까지만) 설치된다.

 

>, <, > =, < =, =은 알기 쉽게 초과, 미만, 이상, 이하, 동일을 뜻합니다. npm i express@>1.1.1

npm i express@>1.1.1

- 반드시 1.1.1 버전보다 높은 버전이 설치된다.

npm i express@latest // npm i express@x

- 안정된 최신 버전의 패키지 설치

5.4 기타 npm 명령어

npm outdated

- 업데이트 가능한 패키지를 확인할 수 있다.

npm update

- 모든 패키지가 wanted 버전으로 업데이트 된다.

npm uninstall [패키지명]

- 패키지 제거

npm search [검색어]

- npm 패키지 검색

728x90
반응형