인생자취

TIL | 모듈과 패키지 매니저 파헤치기 본문

개발/Dev | 웹개발

TIL | 모듈과 패키지 매니저 파헤치기

hnhnhun 2022. 7. 21. 03:48

1. 모듈(Module)

1.1 모듈 사용의 목적

  • 다목적으로 js 파일의 코드를 작성하면 유지보수 측면에서 좋을 수 없다.
  • 따라서 하나의 js 파일이 하나의 목적을 갖도록 소스코드를 작성한다. (컨벤션)
  • 그러므로 소스코드의 분리를 모듈로 정의하여 사용하는 것이다.

1.2 모듈 (module)

  • 노드에서는 각 파일 하나하나가 모듈이다.
  • 모듈을 가져올 때, commonJS 방식으로는 require 메서드로 가져오고, ECMAScript 방식으로는 export, import로 가져온다.
  • .mjs의 확장자를 사용하여 모듈로 만들 수 있다. *이때 .mjs 파일 내에서는 모듈로 불러오는 파일의 확장자를 필히 써줄것.

1.3 모듈 해석 (module resolution)

예) CommonJS : require

  • 절대경로
    • node standard library에 있는 모듈
    • module.paths의 경로 중 순서대로 검사하여 해당 모듈이 있는 경우 가장 첫번째 모듈을 가져옴.
  • 상대경로 : 프로젝트 내 다른 파일
    • require('../modulename')
    • require('./modulename')

2. 패키지 매니저 (Package Manager)

2.1 패키지 매니저 사용의 목적

  • 모든 소스코드를 직접 구현하기란 매우 어렵고, 실력이 좋은 다른 개발자에 의해 잘 짜여진 패키지들이 수두룩 빽빽하다.
  • 그렇기 때문에 패키지 매니저를 통해 필요에 따라 커스터마이징하게 패키지를 프로젝트에 설치하고, 이를 적절하게 사용할 수 있다.

2.2 package.json

The 'package.json' file is the heart of any Node project.
It records important metadata about a project which is required before publishing to NPM,
and also defines functional attributes of a project that npm uses to install dependencies,run scripts,
and identify the entry point to our package.

 

  • npm에 publish 하기 전에 필요한 메타데이터가 기록되어 있다.
  • 함수적 속성과 같은 npm의 의존성, 스크립트를 실행, 패키지의 진입점을 식별시켜준다.
  • npm 패키지에 비슷한 버전을 추적하게 하기 위해서 꺾쇠/캐럿(^) 표시를 한다.
    *확 와닿지는 않지만, 프로젝트 내에서 npm 패키지의 버전을 추적하는게 필요했기 때문에 이러한 기능이 있다고 함.
  • ./node_modules/.bin/eslint src/**/*/
  • package.json에 검사를 해주는 기능의 복잡한 문장을 script로 작성해서 키워드로 불러올 수 있다.

2.3 package-lock.json

  • package-lock.json에 입력된 패키지의 정보는 실제 정보다.
  • 락파일에 입력된 정보는 플젝을 맡은 개발자 모두가 락파일에 쓰여진 버전으로 동일하게 사용하라는 의미로 받아들이면 된다.
  • 본 파일에 쓰여진 버전은 차이가 나서는 안된다.

2.4 패키지 매니저 매커니즘

  1. npm install 패키지명
  2. node_modules / 패키지명
  3. js파일에서 require('패키지명/index') 또는 js파일에서 require('패키지명')을 입력
    • 'index'까지 주소를 올릴 수 있는 이유는 index.html이 프로젝트 내에서 의미하는 바가 특정 디렉토리의 내용물을 보여주는 기능을 한다는 의미로 쓰이기 때문(관습적으로 쓰임)
    • 예) https://example.com/index.html === https://example.com/ ->>>>> 웹 페이지가 동일하다.
    • 폴더를 require 하는 것과 파일을 require 하는 것은 역할적으로 동일하다.
  4. 패키지를 const 변수에 할당해서 사용한다.

2.5 npm 사용을 위한 스크립트 예시

$ npm install --save-dev decamelize

  • 프로젝트 개발에서만 사용한다.

$ npm install / npm i

  • 의존하는 패키지 모두를 설치한다.

$ npm uninstall decamelize

  • 패키지를 삭제한다.

$ npm install decamelize@3.1.0

  • @(at) 3.1.0 ver(특정 버전)을 설치한다.

$ npm update decamelize

  • 3.1.0의 버전이 3.2.0으로 버전업을 하라는 의미다.
  • ^(caret)3.1.0, ~(tilde)3.1.0에 따라 버전 업데이트가 다르게 이루어진다.
  • ^3.1.0 -> 3.2.0
  • ~3.1.0 -> 3.1.1
  • 이러한 방법은 기존의 기능성을 깨지 않으면서도 버전을 최대한 올려줄 수 있다.

2.6 yarn (package manager)

  • yarn은 효과적인 캐싱 때문에 속도가 매우 빠르다.
  • yarn으로 스크립트를 정의하고 사용할 때 yarn만의 기능으로 좀 더 간단하게 런타임 스크립트를 작성할 수 있다.
  • 예) yarn eslint *끝(?!)
Comments