자바스크립트에서의 대표적인 파일 입출력 방법은 CommonJS 와 ES6 문법이 있습니다.
서로 사용법이 다르며, 특징과 차이점이 있습니다.
require : 가져오기exports : 내보내기module.exports : 내보내기import : 가져오기export : 내보내기export defaults : 내보내기주의사항
출력할 때 export(ES6) 와 exports(CommonJS)를 헷갈리지 않도록 주의해야 합니다.
/* CommonJS */
const name = require('./module.js');// 모듈 전체를 export, 파일내 한번만 사용가능하다.
const obj = {
num: 100,
sum: function (a, b) {
console.log(a + b);
},
extract: function (a, b) {
console.log(a - b);
},
};
module.exports = obj;const obj = require('./exportFile.js');
obj.num; // 100
obj.sum(10, 20); // 30
obj.extract(10, 20); // -10// 멤버를 직접 일일히 export
exports.name = 'Ann'; // 변수의 export
exports.sayHello = function() { // 함수의 export
console.log('Hello World!');
}
exports.Person = class Person { // 클래스의 export
constructor(name){
this.name = name;
}
}const { name, sayHello, Person } = require('./exportFile.js');
console.log(name); // Ann
sayHello(); // Hello World!
const person = new Person('inpa');/* ES6 */
import name from './module.js'// 모듈 전체를 export, 파일내 한번만 사용가능하다.
const obj = {
num: 100,
sum: function (a, b) {
console.log(a + b);
},
extract: function (a, b) {
console.log(a - b);
},
};
export default obj;// 전체 자체를 export 할 경우 중괄호 없이 그냥 씀
import obj from './exportFile.js';
obj.num; // 100
obj.sum(10, 20); // 30
obj.extract(10, 20); // -10// 멤버를 직접 일일히 export
export const name = 'Ann'; // 변수의 export
export function sayHello() { // 함수의 export
console.log('Hello World!');
}
export class Person { // 클래스의 export
constructor(name){
this.name = name;
}
}
// ----------------------- OR ----------------------- //
// 멤버를 따로 묶어서 export
const name = 'Ann';
function sayHello() {
console.log('Hello World!');
}
class Person {
constructor(name){
this.name = name;
}
}
export {name, sayHello, Person}; // 변수, 함수, 클래스를 하나의 객체로 구성하여 exportimport { name, sayHello, Person } from './exportFile.js';
console.log(name); // Ann
sayHello(); // Hello World!
const person = new Person('inpa');
// ----------------------- OR ----------------------- //
// 개별로 export 된걸 * 로 한번에 묶고 as 로 별칭을 줘서, 마치 전체 export default 된걸 import 한 것 처럼 사용 가능
import * as obj from './exportFile.js';
console.log(obj.name); // Ann
obj.sayHello(); // Hello World!
const person = new obj.Person('inpa');import, export 문법을 사용하려면 설정이 필요합니다.
{
"type": "module"
}package.json 파일에 위의 값을 추가하는 방법입니다.
다른 방법은 import , export 를 인식시키기 위해 .mjs 파일을 생성하여
모듈 키워드를 구분하는 방법이 있습니다.
// const express = require('express');
import express from 'express';
const app = express();
app.get('/', (req, res) => {
res.send('<h1>Hello World!</h1>');
});
app.listen(3000, () => {
console.log('3000번 포트 서버 시작');
});module.exportsexport default하나의 프로그램에서 두 키워드를 동시에 사용할 수 없습니다