[Node.js] NPM 기초 알아보기

유진·2023년 9월 18일

Node.js

목록 보기
1/8

NPM이란

Node Package Manager
Node.js 프로젝트를 관리하는 필수적인 도구 ( 온라인 저장소 + 커맨드라인 도구)


NPM 온라인 저장소

  • 수많은 오픈소스 라이브러리와 도구들이 업로드되는 저장소
  • 필요한 라이브러리나 도구를 손쉽게 검색 가능
  • Node.js의 인기로 거대한 생태계를 보유

커맨드라인 도구

프로젝트 관리를 위한 다양한 명령어를 제공

  • 저장소에서 라이브러리, 도구 설치
  • 프로젝트 설정 / 관리
  • 프로젝트 의존성 관리


NPM 사용법

1) 프로젝트 생성

$npm init

  • 프로젝트 디렉터리를 생성하고 해당 디렉터리 안에서 npm init 명령어를 사용하면 몇 번의 질문을 통해 package.json이라는 파일을 만들어 주고 이 디렉터리는 Node.js 프로젝트가 된다.

    package.json : 프로젝트 관련 정보들이 저장되는 파일. 이 파일을 직접 수정하거나 npm 명령어를 사용하여 프로젝트 정보를 수정할 있다.

    • dependencies - 어플리케이션 코드에 직접적으로 사용되는 모듈이다.
    • devDependencies - 어플리케이션 코드에는 사용되지 않지만 테스트/프로세스 재시작/린팅 작업들을 수행할 때 사용되는 모듈이다. (서포트 툴)

2-1) 의존성 관리하기

$npm install [package-name]

  • 프로젝트 내에서 사용하는 라이브러리를 관리하는 방법이다.
  • 프로젝트가 실행되기 위해 라이브러리에 의존하기 때문에 이러한 라이브러리들을 dependency(의존성)라고 한다.
  • npm install 명령어를 통해 프로젝트 의존성을 관리 할 수 있다.
  • npm install 명령어는 사용 방법에 따라 여러 용도로 사용 가능하다.
    • npm i 를 축약형으로 사용 가능
    • 의존성 추가, 의존성 내려받기, 개발용 의존성 추가, 전역 패기키 추가
  • 추가된 패키지는 package.json의 dependencies 안에 추가되며, node_modules 디렉터리에 저장됨.

    라이브러리 : 특정 기능을 수행하는 코드의 묶음
    복잡한 기능을 직접 작성하지 않고, 다른 사람이 구현한 것을 사용하는 방법으로 Node.js 에서는 패키지라고도 부름.


$npm install [package-name] --save-dev

  • npm은 개발용 의존성을 분리하여 관리할 수 있다.
  • 개발용 의존성이란 배포 전까지만 사용하는 의존성이다. (ex. 유닛 테스트 라이브러리)
  • --save-dev 옵션을 이용하면 개발용 의존성을 추가할 수 있다. 개발용 의존성은 package.json의 devDependencies에 추가된다.

package-lock.json
프로젝트에 의존성을 추가하면 snapshot 형태로 package-lock.json이라는 파일이 생성된다.
사용하고 있는 외부 모듈들의 상세한 스펙들이 저장된다.
프로젝트에 의존성을 추가하면 자동으로 ‘^최신버전’으로 추가가 되는데, 의존성 버전이 갑자기 변경되지 않도록, 설치된 버전을 고정하는 역할을 한다.

의존성 버전 표기법
npm install [package-name]@[version] 으로 패키지 버전을 지정할 수 있다.

~1.13.0 - 1.13.x 버전 설치
^1.13.0 - 1.x.x 버전 설치, 가장 왼쪽의 0이 아닌 버전을 고정.
0.13.0 – 0.13.0 버전만 설치


2-2) 의존성 내려받기

$npm install

  • 기본적으로 node_modules 디렉터리는 코드 관리나 배포 시에 업로드 하지 않다. 의존성이 많아지면 용량이 너무 커지는 것과, 운영체제별로 실행되는 코드가 다른 경우가 존재하기 때문이다.
  • npm install 명령어를 아무 옵션 없이 사용하면 package.json 에 정의된 dependencies와 devDependencies의 의존성을 node_modules 디렉터리에 내려받음.

$npm install --production

  • 프로젝트를 배포할 때에는 개발용 의존성을 같이 포함할 필요가 없다.
  • package.json 의 dependencies만 node_modules에 내려받는다.

$npm install [package-name] --global

  • 패키지를 전역 패키지 디렉터리에 내려받는다.
  • 주로 프로젝트에 종속되지 않는 커맨드라인 도구들을 전역 패키지로 추가해서 사용한다.
    Ex) express-generator, pm2

로컬 패키지와 전역 패키지
로컬 패키지 : package.json 에 선언되어 있고, node_modules에 저장된 패키지
전역 패키지 : npm install -g 를 통해 내려받아, 전역 패키지 저장소에 저장된 패키지

✔ 전역 패키지도 프로젝트에서 사용할 수 있으나, 프로젝트의 의존성이 package.json 내에 명시적으로 선언되어 있는 것이 프로젝트 관리의 좋은 방향이다.


2-3) 의존성 삭제하기

$npm remove [package-name]

  • 의존성 패키지를 삭제할 수 있다.
  • package.json의 dependencies와 devDependencies에서 삭제하고 node_modules에서도 삭제한다.

3) 스크립트 실행하기

  • 스크립트란 간단한 동작을 수행하는 코드로 package.json의 scripts에 선언된 스크립트를 npm run [script-name] 명령어로 실행할 수 있다.
  • npm script 내에선 의존성 패키지를 사용할 수 있다.
// 실행
$ npm run say-hi
"hi"

// package.json
{"scripts": {
		"say-hi": "echo \"hi"\"
	},}
  • npm 스크립트에는 run을 제외하고 사용할 수 있는 주요 스크립트들이 있다.
    • test - 코드 유닛 테스트 등에 사용
    • start - 프로젝트 실행
    • stop - 프로젝트 종료
  • run을 제외하고 사용할 수 있을 뿐, npm 내부적으로 코드를 제공해 주는 것은 아니다.


명령어의미주요 파일/디렉터리의미
npm init프로젝트 생성node_modules프로젝트 의존성 저장 디렉터리
npm install의존성 추가package.json프로젝트 관리 (버전, 의존성, 스크립트, …)
npm remove의존성 삭제package-lock.json의존성 버전 확인
npm run스크립트 실행


npm 레지스트리 (npm Registry)

  • 패키지를 업로드하는 공간
  • Public/Private
  • 개발자들은 registry로부터 필요한 서드파티 패키지를 받아 본인 코드에서 사용할 수 있다.
  • 회사 내부에서만 사용하는 패키지는 private registry에 올려서 관리하는 경우가 많다.
  • NPM(inc.), GitHub Package Registry, JFrog, GitLab Package Registry
  • 소스 코드 자체를 관리하는 git repository와는 다르다. 완성된 제품을 저장하는 저장소에 가깝다.



NPX

npm 패키지를 설치하지 않고 사용할 수 있게 해주는 도구.

  • 프로젝트에 추가하거나 전역 패키지로 추가하지 않고, npx를 이용하여 바로 실행할 수 있다.

  • npx를 사용하면 Node.js의 특정 버전을 사용하여 js 파일을 실행할 수 있다.

  • 프로젝트의 Node.js 버전 별 실행환경을 확인할 때 유용하다.

  • npx를 이용하면 gist 코드를 다운받지 않고 바로 실행 가능하지만 git이 설치되어 있어야 한다. (gist는 github에 등록된 간단한 코드)

  • 온라인상의 코드는 어떤 위험이 있을지 모르기에 코드를 잘 확인하고 실행해야 한다.



profile
도라에몽 암기빵

0개의 댓글