DEVELOP
article thumbnail

01. 모듈이란?

# 모듈 

: 전체를 이루는 부품 하나하나 

- js 파일 하나

 

# require

: 모듈을 로드해서 객체 1개를 리턴 

- .js를 붙이지 않아도 가능 

- 변수(let으로 선언)보다는, 상수(const)로 받는 것이 좋음 

- let m = require('./math-tools.js');

- let m = require('./math-tools.');


02. 모듈 내부의 함수 공개하기 

 

# exports 

- exports.add = add; : add라는 함수를 외부에서도 add라는 이름으로 공개하겠다

 

- main.js 

let m = require('./math-tools.js');

console.log(m.add(1,2));

- math-tools.js

function add(a, b) { return a + b; };

exports.add = add;

04. 하나의 객체로 모아서 외부에 공개하기 

- 여러개를 객체로 모아서 한번에 외부에 공개할 때는

   module.exports = 객체이름;

let calculator = {
  PI: 3.14,
  add: function (a, b) { return a + b; },
  subtract: function (a, b) { return a - b; },
  multiply: function (a, b) { return a * b; },
  divide: function (a, b) { return a / b; },
};

module.exports = calculator;

06. exports와 module.exports(심화)

ⅰ. Node.js는 모듈을 로드하기 전에 그 전체 코드를 Module wrapper function이라는 것으로 감싸준다.

  •   Module wrapper function
(function (exports, require, module, __filename, __dirname) {
  // 모듈 코드
});
(function (exports, require, module, __filename, __dirname) {
  function add(a, b) {
    return a + b;
  }
exports.add = add;
});

ⅱ. Module wrapper function은 5개의 인자 ( exports, require, module, __filename, __dirname) 에 각각 적절한 값이나 객체를 설정해준다.

  •   우리가 직접 정의한 적 없지만, 모듈 안에서 항상 자유롭게 접근 가능 

 

ⅲ. exports 객체와 module 객체의 exports 프로퍼티가 가리키는 객체는 동일한 객체이다.

  •     우리가 모듈 내부의 것들을 외부로 공개하기 위해 exports나 module.exports를 사용한 것은 바로 이 객체에 접근하기 위해서이다. 
  •    우리가 모듈 내의 코드에서 exports 인자로 넘어와서 그 프로퍼티를 하나씩 채워나가는 객체가 다른 모듈에서 이 모듈을 require 함수로 로드했을 때 리턴되는 객체이다.

 


07. 코어 모듈 

  • 모듈은 내가 직접 만든 모듈 / 이미 만들어져 있는 모듈로 나누어진다.
  • 이미 만들어져 있는 모듈은 개발할 때 필요한 기능이 많고, 이것들을 잘 가져다 쓰는 것이 중요하다.
  • 이미 만들어져 있는 모듈은 코어모듈 / 서드파티 모듈로 나누어진다. 
  • 코어모듈 : node라는 실행 파일 안에 이미 포함되어 있는 모듈  
     - node만 설치하고 나면 바로 사용 가능
  • 서드파티 모듈  : 여러 개발자나 회사들이 만들어서 인터넷의 저장소에서 제공하는 모듈
    - 제 3자가 만든 모듈

* 코어모듈의 예시
- fs : file system , 파일 관련 함수 제공
- readdirSync : 해당 경로의 파일들을 읽어옴 

const fs = require('fs'); 

let fileList = fs.readdirSync('.');
console.log(fileList);

현재 디렉토리의 파일 목록들을 배열에 담아 출력

 - writeFileSync : 파일 이름이 new이고, 내용이 'Hello World!' 인 파일 생성 

const fs = require('fs'); 

fs.writeFileSync('new','Hello World!');

- os : operating system , 운영체제에 관한 함수 제공 

- cpus() : cpu의 정보 리턴

const os = require('os'); 

console.log(os.cpus());

cpu에 대한 정보 출력


08. Node.js와 브라우저의 차이 

1. 제공하는 API가 다름

API (Application Programming Interface) : 어떤 플랫폼이나 실행환경 등에서 제공하는 인터페이스 , 특정 환경에서 자유롭게 가져다 쓸 수 있는 함수나 객체 등을 의미 

 

2. 엔진의 차이

Node.js -> V8, 크롬 -> V8, 파이어폭스 -> SpiderMonkey ... 

 

# Node.js 개발 팁

- 특정 브라우저가 자바스크립트의 표준 문법 중에서 어디까지를 지원하는지 확인하는 것이 중요 

- 각 브라우저 별 자바스크립트 표준 구현 현황 : https://kangax.github.io/compat-table/es6/ 

 

ECMAScript 6 compatibility table

Sort by Engine types Features Flagged features Show obsolete platforms Show unstable platforms <!-- --> V8 SpiderMonkey JavaScriptCore Chakra Carakan KJS Other ⬤ Minor difference (1 point) ⬤ Small feature (2 points) ⬤ Medium feature (4 points) ⬤ La

kangax.github.io


09. 서드파티 모듈 

 

- 터미널에 npm install cowsay 입력 

   - npm : Node Packaged Manager 

- package-look.jsonpackage.json, node_modules 디렉토리가 자동으로 추가됨

    - package-look.json : 현재 디렉토리 안에 설치된 모든 서드파티 모듈들에 관한 정보가 기록되어 있음

        -  하나의 서드파일 모듈이 설치될 때는 그것이 의존하는 다른 서드파티 모듈들도 함께 설치됨 ( 다단계 의존 관계 )

        -  dependencies 필드에 현재 작업 디렉토리 안에 설치된 서드파티 모듈들의 이름과 버전 정보가 저장되어 있음 

    - node_modules 디렉토리 : 서드파티 모듈들이 실제로 설치되는 공간 

 

- cowsay.say({text : '원하는 문구', }) : '원하는 문구'를 말하는 말 그림이 출력됨 

const cowsay = require('cowsay');

console.log(cowsay.say({
  text : 'I love JS!',
}));

 

 

profile

DEVELOP

@JUNGY00N