Open yellow-jam opened 1 year ago
js는 스크립트 언어 (컴파일 불필요) Read Eval Print Loop 입력한 코드를 읽고, 해석하고, 결과물을 반환하고, 종료할 때까지 반복한다
터미널에서 node
명령 입력 시
>
모양의 프롬프트
js 코드 입력 가능
js 파일을 만들어 실행
function helloWorld() {
console.log('Hello World');
helloNode();
}
function helloNode() {
console.log('Hello Node');
}
helloWorld();
node
명령어로 파일 실행(.js 확장자 생략 가능)
모듈: 특정한 기능을 하는 함수나 변수들의 집합
// 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'));
module.exports
=== exports
같은 객체를 참조하는 이름이다!// var2.js
exports.odd = 'CommonJS 홀수입니다';
exports.even = 'CommonJS 짝수입니다';
exports.속성명=속성값
형태로 대입 (다른 값 대입 시 참조 관계가 끊겨 더는 모듈로 기능하지 않음)this
node require
실행했으므로 require.js가 require.main이 됨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);
// 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
실행 결과
// var.mjs
export const odd = 'MJS 홀수입니다';
export const even = 'MJS 짝수입니다';
// 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'));
// dynamic.js
const a = false;
if (a) {
require('./func'); // 실행되지 않음
}
console.log('성공');
// dynamic.mjs
const a = false;
if (a) {
import './func.mjs'; // ES 모듈은 if문 안에서 import 불가
}
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);
}
실행 시 현재 파일명, 현재 파일 경로로 바뀜
// filename.js
console.log(__filename);
console.log(__dirname);
import.meta.url
로 경로 가져올 수 있음
// filename.mjs
console.log(import.meta.url);
console.log('__filename은 에러');
console.log(__filename);
이 장에서 배울 것