[TIL]1201-Node.js(1)

NPM과 모듈

NPM이란?

  • Node Package Manager
  • Node.js 프로젝트를 관리하는 필수적인 도구

NPM 온라인 저장소

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

커맨드라인 도구

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

package.json

  • 프로젝트 관련 정보들이 저장되는 파일
  • 이파일을 직접 수정하고나 npm명령어를 사용하여 프로젝트 정보수정 가능

의존성 관리하기

  • 프로젝트 내에서 사용하는 라이브러리를 관리하는 방법
  • 프로젝트가 실행되기 위해 라이브러리에 의존하기 때문에
  • 이러한 라이브러리들을 dependency(의존성)라고 한다.

라이브러리란?

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

NPX 란?

  • npm 패키지를 설치하지 않고 사용할 수 있게 해주는 도구
  • node.js의 특정 버전을 사용하여 js파일을 실행할 수 있다.
  • github gist 코드를 다운 받지 않고 바로 실행 가능하다.

Node.js의 모듈 이란?

  • 간단한 프로그램이라면 파일 하나로도 가능
  • 프로젝트가 커지면 기능에 맞게 코드를 분리하는 것이 중요하다
  • 모듈은 코드를 분리하기 위한 방법

모듈과 패키지

  • 패키지는 모듈의 모음

Node.js의 기본 제공 모듈 console

  • 브라우저에서 제공 되는 console과 유사한 디버깅 도구
  • log,warn,error 함수로 로그 레벨 표시
  • time, timeLog,timeEnd 함수로 시간 추적

Node.js의 기본 제공 모듈 process

  • 현재 실행프로세스 관련 기능 제공
  • arch,argv,env 등 실행 환경 및 변수 관련 값 제공
  • abort,kill,exit 등 프로세스 동작 관련 함수 제공

Node.js의 기본 제공 모듈 fs

  • 파일 입출력을 하기 위해 사용
  • readFile, writeFile 함수로 파일 읽기, 쓰기
  • Sync 함수 제공. 동기조작
  • watch로 파일/디렉터리 변경 이벤트 감지

Node.js의 기본 제공 모듈 http

  • http서버,클라이언트를 위해 사용
  • createServer 함수로 서버 생성
  • Request 함수로 http 요청 생성

모듈의 기본적인 작성법

// index.js
const name = "yun";
const age = 26;
const nationality = "korea";

module.exports = {
  name,
  age,
  nationality,
};
// 모듈이 load 될때 사용될 값을 module.exports로 내보냄.
// ---
const man = require("./index.js");
// man 출력값 {name : "yun", age: 26, nationality: "korea"}

변수명으로 export 하는 모듈 작성법

// index.js
const name = "yun";
const age = 26;
const nationality = "korea";

exports.name = name;
exports.age = age;
exports.nationality = nationality;
// 모듈을 object로 만들고, 각 key-value를 지정해서 내보냄.
// ---
const man = require("./index.js");
// man 출력값 {name : "yun", age: 26, nationality: "korea"}

함수를 export하는 모듈 작성법

// index.js
module.exports = (name, age, nationality) => {
  return {
    name,
    age,
    nationality,
  };
};
// 모듈을 함수로 만들어서 모듈 사용 시에 값을 정할 수 있게 내보냄.
// ---
const man = require("./index.js")("yun", 26, "korea");
// man 출력값 {name : "yun", age: 26, nationality: "korea"}

모듈의 사용 방법

  • require 함수를 통해 모듈을 load 할 수 있다.
  • Java에서 import와 유사
  • 의존성 패키지, 직접 작성한 모듈 사용 가능하다.

모듈의 사용 방법 - require 동작의 이해

  • require 할 때 모듈 코드가 실행된다.
  • Node.js의 모듈은 첫 require 시에 cache, 두 번 실행하지 않는다.
  • 모듈 코드를 여러 번 실행하기 위해선 함수 모듈로 작성한다.

모듈의 사용 방법 - npm 패키지

const dayjs = require("dayjs");
console.log(dayjs());
  • 의존성 패키지들은 require('package-name')로 load 할 수 있다.
  • 패키지를 사용하려면 node_modules에 내려받아져 있어야 한다.

모듈의 사용 방법 - 직접 작성한 모듈

const myModule = require("./my-module");
console.log(myModule);
  • 직접 작성한 모듈은 현재 파일과의 상대 디렉터리로 load
  • my-module이 .js 파일인 경우 해당 파일 load
  • my-module이 디렉터리인 경우 my-module/index.js 파일 load

모듈의 사용 방법 - 함수형 모듈

const myFunctionModule = require("./my-function-module");
console.log(myFunctionModule(name, age, nationality));
  • 함수형 모듈은 load한 경우 모듈이 바로 실행되지 않는다.
  • 필요한 시점에 load된 함수를 실행하여 모듈을 사용할 수 있다.

모듈의 사용 방법 - json 파일

// my-data.json 을 가지고 있다.
const myData = require("./my-data");
console.log(myData);
  • require로 json 파일도 load 가능하다.
  • object로 자동파싱 된다.

ES Module

  • ES6에서 등장한 JavaScript의 공식적인 표준 모듈
  • JavaScript는 기본적으로 '모듈'을 제공하고 있지 않았다.
  • Node.js는 독자적인 방식을 통해 모듈을 지원하고 있었다.(commonjs)
  • ES Module의 등장으로 Node.js에선 두 가지 모듈을 지원할 필요가 생겼다.

ES Module과 commonjs

  • ES Module과 commonjs는 문법과 기본적인 동작 방식이 다르다.
  • commonjs는 module.exports와 require로 모듈을 만들고 사용
  • ES Module은 export와 import로 모듈을 만들고 사용

좋은 웹페이지 즐겨찾기