REPL
- R(READ) 읽기 / E(Evaluate) 실행 / P(Print) 결과출력 / L(Loop) 반복
- 윈도우에서는 명령 프롬프트에 node 입력
- 경로 설정 후 node (파일명) 입력하면 실행 가능 (결과 출력)
Module
- 노드는 자바스크립트 코드를 모듈로 만들 수 있음
- 모듈 : 특정한 기능을 하는 함수나 변수들의 집합, 모듈로 만들면 여러 프로그램에서 사용 가능
- 다양한 파일에서 사용되는 함수, 객체, 배열, 변수를 모듈화 시켜서 코드 중복을 제거한다.
const {odd, even} = require('./var');
import {odd, even} from './var';
module.exports = checkOddorEven;
export default checkOddorEven;
- 노드 모듈 시스템 문법 : module.exports / require는 이고
- 자바스크립트의 모듈 시스템 문법 : import, export
- 노드에서도 자바스크립트 모듈 시스템 문법을 지원하지만 완전히 동일한 기능은 하지 않는다는 점을 주의.
global
- 노드의 전역 객체
- 모든 파일에서 접근 가능 / window처럼 생략도 가능
- globalThis로 통일됐음.
- node에서는 window나 document가 동작하지 않음
console
- console.log : 에러 로깅
- console.dir : 객체 로깅
- console.trace : 호출 스택 로깅
- console.time / timeEnd
- time과 timeEnd : 실행되는데 걸리는 시간을 콘솔로 띄워줌
- 코드가 백그라운드에서 비동기적으로 실행되게 인위적으로 작성할 수 있음'
filename(현재 파일 경로), dirname(현재 폴더, 디렉토리)
- 브라우저와 다르게 노드는 컴퓨터에 접근을 해서 파일을 직접적으로 수정할 수 있음.
- console.log(__filename) ...
module exports의 특성
- module.exports === exports === {}
- module.exports에 함수를 넣으면 참조관계가 끊기게 됨.
- exports를 사용하고 module.exports를 함께 사용하면 안됨.
- 전역 스코프에서 this는 this === module.exports임
- function 내부의 this는 global
require의 특성
- require('./var'); // 이렇게만 해도 불러오는 파일을 실행시킬 수 있음
require의 property 중
-
main : require을 실행시키면 기본적으로 module임. require.main을 통해서 어떤 파일을 실행한 건지 알아낼 수 있음
- require main은 노드 실행 시 첫 모듈을 가리침
-
cache : node는 require로 한 번 읽은 정보를 require cache property 내부에 저장해놓음. 이후에 다시 한번 더 실행시키면 캐시에 저장된 파일을 불러옴.
- 캐싱 : 하드디스크에 있는 정보를 메모리로 옮기는 걸
- 하드디스크를 읽는 것은 비교적 느리고 메모리를 읽는 것은 비교적 빠르다.
-
require가 제일 위에 올 필요는 없음 // but import는 가장 위에 있어야 함.
순환 참조
dep1.js
require('./dep2');
dep2.js
require('./dep1');
- 이런 상황을 막기 위해 순환 참조가 발생하면 {} 빈 객체로 변경함.