3장 노드 기능 알아보기

이번 챕터에서는 노드에서 사용하는 모듈인 CommonJS와 ECMAScript 모듈(ES 모듈)에 대해서 알아보자.

3.1 REPL 사용하기
3.2 JS 파일 사용하기
function helloWorldO {
    console.log('Hello World');
    helloNode();
}
function helloNode() {
    console.log('Hello Node');
}

helloWorld();
3.3 JS 파일 사용하기
3.3.1 CommonJS 모듈

var.js

const odd = 'CJS 홀수입니다';
const even = 'CJS 짝수입니다';
module.exports = {
    odd,
    even,
}

func.js

const { odd, even } = require('./var');
function checkOddOrEven(num) {
    if (num % 2) { // 홀수이면
        return odd;
    }
        return even;
}
module.exports = checkOddOrEven;
노드에서 this는 무엇일까?
console.log(this);
console.log(this === module.exports);
console.log(this === exports);
function whatIsThis() {
    console.log('function', this = exports, this === global);
}
whatlsThis();
{}
true
true
function false true

require.js

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);
require가 가장 위에 오지 않아도 됩니다.
require, cache입니다.
[Object: null prototype] {
        'C:\\Users\\zerocho\\require. js' : Module {
        id:'.'
        exports:'저를 찾아보세요.',
        filename: 'C://Users//zerocho//require.js',
        loaded: false,
        children: [ [Module] ]
        paths: [
        'C:\\Users\\zerocho\\node_modules',
        'C:\\Users\\node_modules',
        'C:\\node_modules'
        ]
    },
'C\\Users\\\zerocho\\vars.js': Module {
        id:'C\\Users\\\zerocho\\vars.js',
        exports: { odd 'CJS 홀수 입니다.': even:'CJS 짝수입니다.'},
        filename: : 'C\\Users\\\zerocho\\vars.js',
        loaded: true,
        children: [],
        paths: [
        'C:\\Users\\zerocho\\node_modules'z
        'C:\\Users\\nodejnodules'z
        'C:\\node_modules’
        ]
    }
}
require.main입니다.
true
C:\\Users\\zerocho\\require. js

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();
3.3.2 ECMAScript 모듈

var.mjs

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

func.mjs

import { oddz 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'));
3.3.3 다이내믹 임포트

dynamic.js

const a = false;
if (a) {
    require('./func');
}
console.log('성공');

dynamic.mjs

const a = false;
if (a) {
    import './func.mjs';
}
console.log('성공');

dynamic.mjs

const a = true;
if (a) {
    const m1 = await import('./func.mjs');
    console.log(m1);
    const m2 = await import('./var.mjs');
    console.log(m2);
}
3.3.4 __filename, __dirname

filename.js

console.log(__filename);
console.log(__dirname);
C:\Users\zerocho\filename.js
C:\Users\zerocho

끝!