모듈
NodeJS에서의 모듈
모듈이란 관련된 코드를 하나의 코드 단위로 캡슐화 하는 것을 말한다. 여러개의 코드로 분할하여 관리하고 index.js
파일 하나에 전부 import 시켜 효율적으로 코드를 관리할 수 있다.
module.exports = {
hello: function() {
return "HELLO";
},
bye: function() {
return "BYE";
}
};
위와 같이 모듈을 작성하면 메안 파일에서 다음 코드를 통해 const greeting = require(‘./greeting’);
작성한 모듈을 import 시킬 수 있다.
여기에서 require
코드는 object를 반환한다. 또한 module.exports
와 exports
는 동일 객체를 바라보고 있고 반환 값은 항상 module.exports
이다. exports
는 module.exports
를 참조하는 형태이며 exports
자체는 반환되지 않는다.
//값을 반환하지 않아서 다음과 같은 대체문이 필요함
exports = module.exports = {}
exports.add = (a, b) => a + b //축약
exports = {
add(a, b) { return a + b }
}
결론 : exports
는 이름은 exports
이나 실제로 반환하지 않는다. 헷갈리면 그냥 module.exports
를 쓰자
ES6에서의 모듈
노마드 코더에서 강의할 때 export된 변수를 import from
을 사용했는데 위 강의를 들을 때는 컴파일이 안되서 고민했었다. 그런데 내가 위 강의에서 들은 건 nodeJS에서의 모듈 시스템이고 노마드 코더에서 사용한 건 ES6의 모듈 시스템이었다. 결국 둘이 똑같음.
이걸 찾아본 포스팅에서는 Node에서는 아직 ES6의 모듈을 지원 안한다고 했는데 노드 새로 깔고 하니까 된다 최신 버전에선 되는 것 같음. 근데 헷갈리게 왜 export
와 exports
라고 했는지 모르겠다.
둘이 다른 거라서 비교 포스팅도 없었다.
모듈을 사용하는 목적은 같은데 사용 방법이 조금 다르다. ES6에서는 export
를 사용한다. 원시값(boolean
, let
, const
등등)이든 참조값(object
, function
등)이든 전부 사용 가능하다.
export const a = 1;
export default b = 2;
default
가 붙으면 import
할 때 괄호 안 붙여도 된다. 그리고 as c
처럼 해당 파일에서 변수 이름을 바꿀 수 있다! import * from './somewhere'
라고 하면 export
한 모든 값을 import
한다.
import b, {a as c} from './somewhere';
'front-end > javascript' 카테고리의 다른 글
[javascript] 바나나 문제 / 0.1+0.2 === 0.3이 틀린 이유 (0) | 2020.01.29 |
---|---|
[javascript] ES6 클래스와 Prototype / 왜 Object instanceof Function은 true인가 (4) | 2019.11.09 |
[javascript] 자바스크립트 Drag&Drop 구현하기 (0) | 2019.10.06 |
[Javascript] 자주 사용하는 정규표현식과 공부 사이트 (0) | 2019.09.21 |
[Javascript] ES6, let vs const, 호이스팅과 객체 리터럴, 디스트럭쳐링 (0) | 2019.09.20 |
댓글