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

끝!