모듈 방식의 express 콤포넌트 만들기
코드 기반 모듈화 하기
Modular nodejs express 를 정리했다.
모듈식 구조는 콤포넌트 사이를 완전히 분리되지 않는 것으로 이해할 수 있다. 모듈화 구조는:
- 작은 콤포넌트로 나뉜다
- 콤포넌트 자체의 의존성 (테스트)를 갖고 타 콤포넌트에 영향을 최소화해 갱신할 수 있다.
- 프로젝트 전반 의존성은 개별 콤포넌트낄 공유 (혹은 덮어씀)할 수 있다
- 콤퍼넌트 우선-클래스(first-class)를 만들어야 한다. 즉 상대적인 경로롤
require
를 구문을 사용 않는다.
- 콤퍼넌트 우선-클래스(first-class)를 만들어야 한다. 즉 상대적인 경로롤
- 다시 구성할 필요 없이앱 확장 (혹은 축소)에 전념한다
최소 모듈식 구조
아래 같은 최소 구조를 기반으로 하자:
1 | bin/ |
- bin: npm 스크립에 내장하지 않는 모든것 (ex. hooks, ci 등등 )
- lib: 앱 콤포넌트
콤포넌트를 추가
콤포넌트는 단독으로 사용할 수 있는 프로젝트의 모든 측면이다. 예를 들어, 한 구성 요소는 cron 작업 스케줄링, 전자 메일 보내기, 내보내기 도구에 다른 구성 작업을 할 수 있다. 데이터 측면에서 모든 모델에 전용 인 하나의 구성 요소 또는 각 모델에 대해 별도의 구성 요소를 가질 수 있다
lib 디렉토리에 콤포넌트를 추가한다:
1 | bin/ |
콤포넌트의 진입점은 index.js 이고 package.json에 관련 의존성을 담는다.
package.json은
npm init -y
으로 초기화한다.
먼저 express 모듈을 설치한다. ( 여기선 npm
version 5 이상 사용)
1 | npm i express |
logger 디렉토리에 로깅 모듈을 설치하고, config 디렉토리에 콤포넌트를 위한 구성 파일을 둔다.
콤포넌트 우선 클래스 만들기
콤포넌트는 앱에서 우선 클래스 이라서 프로젝트 어느 곳에서든 바로 접근할 수 있어야 해서, 아래 같이 상대적 경로를 사용하지 말아야 한다.
1 | var logger = require('../../../logger') |
콤포넌트에서 모든 모듈은 /lib 폴더를 참조하게 하므로 아래 같이 트릭을 사용해 node_modules 밑에 _ 로 링크를 만들어 주면
In UNIX, this is:
1 | cd {project_root}/node_modules |
In Windows, it is:
1 | cd {project_root}/node_modules |
require('_/looger)
같이 참조할 수 있다.
1 | var log = require('_/logger') |
의존성 공유
이제 프로젝트 루트에서 콤포넌트를 설치하면 의존성을 사용할 수 있다.
설정
콤포넌트의 분리는 휼륭하다
preinstall
1 | var fs = require("fs"); |