DS-Corner-Study / YUZ

0 stars 1 forks source link

3장 노드 기능 알아보기 #4

Open yellow-jam opened 1 year ago

yellow-jam commented 1 year ago

이 장에서 배울 것

yellow-jam commented 1 year ago

3.1 REPL 사용하기

js는 스크립트 언어 (컴파일 불필요) Read Eval Print Loop 입력한 코드를 읽고, 해석하고, 결과물을 반환하고, 종료할 때까지 반복한다

터미널에서 node 명령 입력 시 > 모양의 프롬프트 js 코드 입력 가능

yellow-jam commented 1 year ago

3.2 JS 파일 실행하기

js 파일을 만들어 실행

function helloWorld() {
    console.log('Hello World');
    helloNode();
  }

  function helloNode() {
    console.log('Hello Node');
  }

  helloWorld();

node 명령어로 파일 실행(.js 확장자 생략 가능)

image

yellow-jam commented 1 year ago

3.3 모듈로 만들기

모듈: 특정한 기능을 하는 함수나 변수들의 집합

노드에서 사용하는 두 가지 모듈 형식

yellow-jam commented 1 year ago

1) CommonJS 모듈

// var.js

const odd = 'CommonJS 홀수입니다';
const even = 'CommonJS 짝수입니다';

module.exports = {
    odd,
    even,
};
// func.js

const { odd, even } = require('./var');

function checkOddOrEven(num) {
    if (num % 2) { // 홀수이면
        return odd;
    }
    return even;
}

module.exports = checkOddOrEven;
// index.js

const { odd, even } = require('./var');
const checkNumber = require('./func');

function checkStringOddOrEven(str) {
    if (str.length % 2) {  // 글자수가 홀수이면
        return odd;
    }
    return even;
}

console.log(checkNumber(10));
console.log(checkStringOddOrEven('hello'));

image

module 객체 대신 exports 객체 사용하기

// var2.js
exports.odd = 'CommonJS 홀수입니다';
exports.even = 'CommonJS 짝수입니다';

유의사항

[Note] 노드에서의 this

require

console.log('require가 가장 위에 오지 않아도 됩니다.');

module.exports = '저를 찾아보세요.';

require('./var');

console.log('require.cache입니다.');
console.log(require.cache);
console.log('require.main입니다.');
console.log(require.main === module);
console.log(require.main.filename);

image

모듈 사용 시 주의 - dep1과 dep2가 서로를 require한다면?

// dep1.js
const dep2 = require('./dep2');
console.log('require dep2', dep2);
module.exports = () => {
  console.log('dep2', dep2);
};
// dep2.js
const dep1 = require('./dep1');
console.log('require dep1', dep1);
module.exports = () => {
  console.log('dep1', dep1);
};
//dep-run.js
const dep1 = require('./dep1');
const dep2 = require('./dep2');

dep1();
dep2();

node dep-run 실행 결과 image

yellow-jam commented 1 year ago

2) ECMAScript 모듈

// func.mjs
import { odd, even } from './var.mjs';

function checkOddOrEven(num) {
  if (num % 2) { // 홀수면
    return odd;
  }
  return even;
}

export default checkOddOrEven;
// index.mjs
import { odd, even } from './var.mjs';
import checkNumber from './func.mjs';

function checkStringOddOrEven(str) {
  if (str.length % 2) { // 홀수면
    return odd;
  }
  return even;
}

console.log(checkNumber(10));
console.log(checkStringOddOrEven('hello'));
yellow-jam commented 1 year ago

3.3.3 다이내믹 임포트

image

// dynamic.mjs
const a = false;
if (a) {
    import './func.mjs';  // ES 모듈은 if문 안에서 import 불가
}
console.log('성공');

image

yellow-jam commented 1 year ago

3.3.4 filename, dirname

실행 시 현재 파일명, 현재 파일 경로로 바뀜

// filename.js
console.log(__filename);
console.log(__dirname);

image