Node.js - NPM과 모듈
1) NPM
Node Package Manager의 약자로 Node.js 프로젝트를 관리하는 필수 도구다.
(온라인 저장소 + 커맨드라인 도구)
온라인 저장소: 오픈소스 라이브러리와 도구들이 업로드되는 저장소
커맨드라인 도구: 프로젝트 관리를 위한 다양한 명령어 제공
2) NPM 사용 ( 간단한 프로젝트 시작에만 필요한 내용만을 함축적으로 다루겠다.)
- 프로젝트 생성하기
$npm init
프로젝트 디렉터리를 생성한 뒤, 해당 디렉터리 안에서 init 명령어를 사용하여 프로젝트가 생성 가능하다.
사진 처럼 몇 개의 질문이 나올 텐데 처음엔 필요한 거 빼고 그냥 모두 엔터.
그럼 package.json 이라는 파일을 만들어준다.
* 여기서 package.json이란?
프로젝트 관련 정보들이 저장되는 파일로, 파일을 직접 수정하거나 명령어를 사용해 프로젝트 정보 수정이 가능하다.
프로젝트 버전, 이름, 설명, 의존성 패키지 등등으로 구성되어있다.
- 의존성 관리하기
프로젝트 내에서 사용하는 라이브러리를 관리하는 것이다.
프로젝트 실행은 라이브러리에 의존하기에, 이런 라이브러리들을 의존성(dependency)이라고 한다.
- 라이브러리란?
특정 기능을 수행하는 코드의 묶음으로, 패키지라고도 부른다.
- npm install
이 명령어를 통해 프로젝트 의존성을 관리할 수 있다.
(npm i 로도 사용 가능하다.)
$npm install [패키지 이름]
install 뒤에 필요한 패키지 명만 붙여주면 설치가 가능하다.
package.json의 dependencies 안에 추가되고, node_modules 디렉토리에 저장됨.
- package-lock.json
프로젝트에 의존성을 추가하면 생성되는 파일이다.
의존성 버전이 갑자기 변경되지 않도록 설치된 버전을 고정하는 역할을 한다.
- 스크립트 실행하기
스크립트란 간단한 동작을 수행하는 코드로,
package.json의 scripts에 선언된 스크립트를 npm run [스크립트 이름]으로 실행한다.
$npm run start // 이렇게 실행
"nodemon app" // 이렇게 출력
3) Node.js의 모듈
프로젝트가 커지면 기능에 맞게 코드를 분리하는 것이 중요하다.
모듈은 코드를 분리하기 위한 방법이다.
*(참고로 패키지는 모듈의 모음이라고 할 수 있음!)
기본 제공모듈 몇 가지를 알아보자!
- process
현재 실행 프로세스 관련 기능을 제공하며, arch, argv, env등 실행환경 및 변수 관련 값과
abort, kill, exit등 프로세스 동작 관련 함수 제공
- fs
파일 입출력을 위해 사용한다. readFile, writeFile 함수로 파일을 읽거나 쓴다.
watch 로 파일/디렉터리 변경 이벤트를 감지할 수도 있다.
- http
http서버, 클라이언트를 위해 사용한다. createServer 함수로 서버를 생성하며,
Request 함수로 http 요청을 생성한다.
4) 모듈의 기본 작성법
// index.js
const name = 'hayan'
const age = 25
module.exports = {
name,
age
}
=================================================
const user = require('./index.js')
====== 위의 코드는 index.js 안의 코드이다. name과 age 값을 쓰고싶으면
name과 age를 module.exports로 내보내야 한다.
====== 아래가 다른 파일이라 가정하면, require('경로') 를 통해 module을 불러올 수 있다.
즉, 모듈은 require할 때 모듈 코드가 실행된다.
* 모듈 작성은 아래처럼 변수명으로도 가능하다.
모듈을 객체로 만들고, 각 key와 value를 지정해서 내보낸다.
exports.name = name
exports.age = age
* 또한 아래처럼 함수로도 작성이 가능하다.
module.exports = (name, age) => {
return {
name,
age
}
}
직접 작성한 모듈 외에도 npm 패키지를 설치하고 load 할 때는
마찬가지로 require('패키지 이름') 으로 하면 된다. 예를 들어
const express = require('express')
express를 설치하고 require하여 모듈 사용이 가능하다.