Node.js

javascript 런타임 (자바스크립트가 동작할 수 있는 프로그램)
웹 브라우저에서만 동작하는 javascript를 V8엔진에다 살을 붙여 실행시킬 수 있는 런타임을 만든 것
서버를 만들 수 있지만 서버만 만드는 것은 아니다.

  • 특징
    Non-Blocking I/O - 다 처리하지 않고 일단 전달
    싱글 쓰레드

  • 노드를 사용하는 이유
    웹 브라우저에서는 내 시스템 컨트롤이 불가능하지만 노드는 내 컴퓨터에서 파일 읽기, 생성, 열기 다 가능 -> 시스템 컨트롤하기 위해 사용

모듈 만들기

구버전

// 003.js
const 이름 = 'lee';
const 나이 = 10;

module.exports.이름 = 이름;
module.exports.나이 = 나이;
// 002.js
// 003.js에서 읽어오기
const 이님개인프로필 = require('./003');
// 003.js로도 작동함

console.log(이님개인프로필.이름);
console.log(이님개인프로필.나이);

  • import 사용
import * as 개인프로필 from './003.js';
console.log(개인프로필.이름);
console.log(개인프로필.나이);

하면 작동이 안된다.

해결

npm init --yes

를 통해 package.json 파일이 생성되는데
이때 main 아래에 type을 명시해줘야 한다.

그나마 최신 문법 사용
export 사용

// 003.js
export const 이름 = 'lee';
export const 나이 = 10;

// 구버전
// module.exports.이름 = 이름;
// export -> 밖에서도 변수 이름 사용할 수 있도록 해줌

import 사용

// 004.js
// * 모든 데이터를 다 가져와서 개인프로필 이름으로 사용
// 오브젝트형
// 개인프로필 = {이름 : 'lee', 나이 : 10}
import * as 개인프로필 from './003.js'
console.log(개인프로필.이름);
console.log(개인프로필.나이);

as 별칭 사용

{구조분해할당}

// 006.js
// {} -> 구조분해할당으로 데이터를 가져오기
// 서로 파일에서의 이름이 같아야 한다.
import {이름, 나이} from './003.js';
console.log(이름);
console.log(나이);

{구조분해할당} + as 별칭 사용

// 007.js
import {이름 as a, 나이 as b} from './007.js'
console.log(a);
console.log(b);
  • export default 하는 경우
// 008.js
export default function hello() {
	console.log('hello world');
}
// 009.js
export default function sum(a, b) {
	return a + b;
}
// 010.js
import hello from './008.js';
import sum from './009.js';

hello();
console.log(sum(3,5));
}

  • export default 없애는 경우
// 011.js
export function sum(a, b) {
	return a + b;
}

{이름} 으로 사용하기 (에러 발생)

// 012.js
import {sum} from './011.js';
// export에서 default가 없는 경우 {이름}을 사용해야 합니다.
console.log(sum(3,5));
}
  • 오브젝트로 묶기
// 013.js
const a = 10;
const b = 20;
const c = 30;
export{a,b,c};
import {a,b,c} from './013.js';
console.log(a, b, c)

  • default 있는것과 없는것 같이 사용
// 015.js
export function a() {
    console.log('a');
}
export function b() {
    console.log('b');
}
export function c() {
    console.log('c');
}
export default function d() {
    console.log('d');
}
// 016.js
import a from './015.js';
a();
// default 우선 출력 -> d 출력됨

////
import {a, b, c} from './015.js';
a();
// a 출력됨

////
import * as all from './015.js';
console.log(all);
console.log(all.default());

// [Module: null prototype] {
//  a: [Function: a],
//  b: [Function: b],
//  c: [Function: c],
//  default: [Function: d]
// }
// d

import d, {a, b, c} from './015.js';
d();
// d 출력됨

export default 값은 중복해서 사용하면 안된다.

  • 함수의 이름이 없는 경우
export default function() {
	console.log('이름없음');
}
import 안녕 from './017.js';
console.log(안녕);
// 이름없음      출력됨
profile
함께 배워나가고 싶습니다!

0개의 댓글