02 Modules & NPM

코이그·2024년 1월 22일

study-again-express-nest

목록 보기
1/1

Modules

필요한 함수들의 집합.

Core modules

http, url, querystring, path, fs, util 등 기본적으로 Node.js에서 제공되는 모듈들.

Local modules

필요에 따라 직접 생성하는 모듈.

const log = {
  info: function (info) {
    console.log("Info " + info);
  },
  warning: function (warning) {
    console.log("Warning " + warning);
  },
  error: function (error) {
    console.log("Error " + error);
  },
};

module.exports = log;

이런 식으로 모듈을 생성할 수 있고, 다른 파일에서 위 객체를 불러오고 싶을 때 const module = require("./log.js"); 처럼 불러올 수 있다.

모듈의 장점

  1. 재사용성 - 반복되는 함수들을 모듈화하여 편하게 관리할 수 있다.
  2. 관계성 - 관련 있는 변수/함수끼리 모듈로 묶어서 관리할 수 있다.
  3. 캡슐화 - 보안 상 필요한 정보(변수/함수)만 가져와서 쓸 수 있다.

exports

module.exports = log;
module.exports.A = 1;
module.exports.encrypt = function encrypt(data) { return "data"; }
exports.encrypt = function encrypt(data) { return "data"; }

하지만 맨 아래에서 모듈을 exports 하는 것이 가장 좋다.

CommonJS vs ECMAScriopt

CommonJS module

Node.js의 기본 모듈로 사용된다.
module.exports-require

ECMAScript module

CommonJS와 다른 문법을 사용한다.
export-import

ES 모듈은 자바스크립트의 표준이고 CommonJS는 Node.js의 기본값이다.

ES 모듈을 사용하려면 파일 확장자를 mjs로 바꿔줘야 한다.

index.js?

모듈을 불러오는 과정에서 관련 있는 모듈을 한 디렉토리 안에 넣어놓고 그 디렉토리의 index.js 파일에서 모든 모듈을 묶어서 내보내는 경우가 많은데, 이는 모듈 로딩 시스템을 복잡하게 할 수 있기 때문에 index.js를 활용하여 모듈을 묶어서 내보내는 것은 지양해야 한다고 한다.

NPM (Node Package Manager)

  1. 오픈 소스 Node.js 프로젝트 게시를 위한 온라인 리포지토리.
  2. 패키치 설치, 버전 관리 및 종속성 관리를 지원하는 해당 저장소와 상호작용하기 위한 cli 유틸리티.

npm init -y 명령어를 입력하면 프로젝트가 생성되고 package.json 파일이 생성된다.
npm install [package_name] 명령어는 원하는 패키지를 설치한다.

install을 통해 패키지를 설치하면 프로젝트의 루트 디렉토리에 node_modules 디렉토리가 생긴다. 여기에는 앞서 설치한 패키지(모듈)와 그 패키지(모듈)가 의존하고 있는 모든 모듈이 포함되어있다.

예를 들어 axios 모듈을 설치했다면 axios가 의존하는 모든 모듈이 설치가 되는 것이다.
axiosfollow-redirects, form-data, proxy-from-env에 의존하고, 이 세 가지 모듈도 의존하는 모듈이 있다면 전부 node_modules 디렉토리에 설치된다.

Semantic versioning

package.json 파일을 보면 dependencies에서 설치된 모듈을 확인할 수 있는데, 모듈마다 3개의 숫자(n.n.n)로 이루어진 버전이 있다.

예시)

"follow-redirects": "^1.15.0

1(MAJOR).15(MINOR).0(PATCH)

MAJOR - 호환되지 않는 API 변경 시 (이전 버전과 호환 x)
MINOR - 이전 버전과 호환 가능; 기능 추가
PATCH - 이전 버전과 호환 가능; 버그 수정

앞에 붙는 기호:
~(틸드): PATCH 까지만 설치/업데이트 (~1.0.5는 1.0.5 ~ 1.1 범위 내에서 설치/업데이트)
^(캐럿): MINOR 까지만 설치/업데이트 (^1.0.5는 1.0.5 ~ 2.0 범위 내에서 설치/업데이트) (예외: 1.0.0 미만의 경우 지정한 버전 자릿수 내에서 업데이트)

package-lock.json

여러 명이서 작업을 할 때에 캐럿이나 틸드로 버전을 표시하면 패키지를 설치/업데이트한 시점에 따라 버전이 다 다를 수 있는데, package-lock.json 파일은 현 시점 기준 정확한 버전 정보를 담고 있다. 따라서 버전 충돌을 해결할 수 있다.

npm audit

현재 프로젝트에 구성된 종속성에 대한 설명을 기본 레지스트리에 제출하고 알려진 취약성에 대한 보고서를 요청한다.
어떤 모듈에서 어떤 취약점이 발생했는 지 알려준다. fix 인수가 제공되면 수정사항이 패키지 트리에 적용된다.

npm install -g

위 명령어로 패키지를 설치하면 현재 프로젝트에만 설치되는 것이 아닌 로컬(컴퓨터) 환경의 전역에 설치가 된다.

profile
COYG🔴⚪

0개의 댓글