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());
08. Node.js와 브라우저의 차이
1. 제공하는 API가 다름
API (Application Programming Interface) : 어떤 플랫폼이나 실행환경 등에서 제공하는 인터페이스 , 특정 환경에서 자유롭게 가져다 쓸 수 있는 함수나 객체 등을 의미
2. 엔진의 차이
Node.js -> V8, 크롬 -> V8, 파이어폭스 -> SpiderMonkey ...
# Node.js 개발 팁
- 특정 브라우저가 자바스크립트의 표준 문법 중에서 어디까지를 지원하는지 확인하는 것이 중요
- 각 브라우저 별 자바스크립트 표준 구현 현황 : https://kangax.github.io/compat-table/es6/
09. 서드파티 모듈
- 터미널에 npm install cowsay 입력
- npm : Node Packaged Manager
- package-look.json과 package.json, node_modules 디렉토리가 자동으로 추가됨
- package-look.json : 현재 디렉토리 안에 설치된 모든 서드파티 모듈들에 관한 정보가 기록되어 있음
- 하나의 서드파일 모듈이 설치될 때는 그것이 의존하는 다른 서드파티 모듈들도 함께 설치됨 ( 다단계 의존 관계 )
- dependencies 필드에 현재 작업 디렉토리 안에 설치된 서드파티 모듈들의 이름과 버전 정보가 저장되어 있음
- node_modules 디렉토리 : 서드파티 모듈들이 실제로 설치되는 공간
- cowsay.say({text : '원하는 문구', }) : '원하는 문구'를 말하는 말 그림이 출력됨
const cowsay = require('cowsay');
console.log(cowsay.say({
text : 'I love JS!',
}));
'BACKEND > Node.js' 카테고리의 다른 글
[ 생활코딩 - Node.js 활용하기] 1. cookie (0) | 2022.11.27 |
---|---|
[코드잇 - Node.js 기본기] 4. 서드파티 모듈과 npm 제대로 배우기 (1) | 2022.11.26 |
[코드잇 - Node.js 기본기] 3. 초간단 웹서버 만들기 (1) | 2022.11.26 |
[코드잇 - Node.js 기본기] 2. Node.js 기본 개념 - ② 비동기 프로그래밍 (0) | 2022.11.26 |
[ 코드잇- Node.js 기본기] 01. Node.js 시작하기 (1) | 2022.11.24 |