티스토리 뷰
require
require는 모듈을 가져오는 방식이다.
노드에서는 각 파일 하나를 모듈로 취급한다. 그리고 그 모듈을 가져오는 함수가 require
이다.
모듈을 사용하는 키워드를 보면 require
도 볼 수 있지만 import
와 from
을 사용하는 것도 볼 수 있다.require
는 Node에서 사용되고 있는 CommonJS 방식이고, import
는 ES6에 새로 도입된 방식이다. 두 개의 키워드 모두 다른 파일의 코드를 불러 오는 모듈의 역할을 한다.
하지만, 만약 <script>
태그를 사용하는 브라우저 환경이나, CommonJS를 기본 모듈시스템으로 채택하고 있는 Node같은 경우에는 Babel과 같은 transpile 도구를 사용하지 않는 한 require
를 사용해야 한다.
그럼 require 함수가 어떻게 작동하는지 조금 더 자세히 살펴보자.
일단 변수를 하나 만들고 해당 변수를 모듈로서 사용해보자.
food.js
파일을 만들고 그 아래에 아래와 같이 변수를 만들고 export 했다.
const foods = ['chicken', 'pizza']
module.exports = foods
이제 main.js
에서 해당 모듈을 사용 해 보자.
const foods = require('./food')
console.log(foods)
이렇게 불러와 사용해보았다.
node main.js
[ 'chicken', 'pizza' ]
결과가 잘 출력되는 것을 확인할 수 있다.
이번엔, 모듈을 여러번 호출해서 사용해 보겠다.
const foods1 = require('./food')
const foods2 = require('./food')
console.log(foods1 === foods2)
결과가 어떻게 찍혔을까? 결과는 true
로 찍혔다.
우리는 분명 모듈을 각각 따로 require하여 다른 변수에 담았는데 같다고 나오는 것이다.
이 이유는 우리가 각각 다른 변수에서 require하더라도 저 파일은 딱 한번만 실행되어 동일한 객체로서 사용되어 진다는 것이다. 즉 require할 때마다 파일이 실행되지 않는다.
const foods = ['chicken', 'pizza']
console.log('foods module loaded')
module.exports = foods
foods.js
를 위와 같이 수정하고 다시한번 테스트해보면 딱 한번만 load되는 것을 확인할 수 있다.
exports 와 module.exports
모듈을 내보내는 방법에는 exports
와 module.exports
가 있다.
사실 exports객체와 module.exports객체는 동일하다.
exports가 module.exports객체를 참조하고 있으며 최종적으로 리턴하는 값은 module.exports
이다.
쉽게 요약하자면 여러개의 객체를 내보내려고 할때 exports
의 변수의 속성으로 할당할 수 있다.
단일 객체를 내보낼 경우 module.exports
변수 자체에 할당할 수 있다.
그렇기에 위 두개의 코드는 같은 결과를 내는 코드가 되게 된다.
const foods = ['chicken', 'pizza']
const drinks = ['water', 'juice']
exports.foods = foods
exports.drink = drinks
const foods = ['chicken', 'pizza']
const drinks = ['water', 'juice']
module.exports = {
foods,
drinks,
}
'Node.js' 카테고리의 다른 글
Node.js 스트림(stream) (0) | 2021.07.15 |
---|---|
package.json과 패키지 매니저(npm, yarn) (0) | 2021.07.15 |
Node.js로 프레임워크 없이 간단한 RESTful API 서버 만들기 (4) (0) | 2021.07.14 |
Node.js로 프레임워크 없이 간단한 RESTful API 서버 만들기 (3) (0) | 2021.07.13 |
Node.js로 프레임워크 없이 간단한 RESTful API 서버 만들기 (2) (0) | 2021.07.13 |
- Total
- Today
- Yesterday
- Computer Architecture
- 벨만포드
- 예외처리
- 그래프
- 중앙대학교
- java
- boj
- 세그먼트 트리
- 시뮬레이션
- 투포인터
- typeORM
- 재귀
- 구현
- BFS
- 백준
- node.js
- 동적계획법
- 그리디
- nestjs
- 컴퓨터 구조
- dfs
- 자바
- ReactNative
- 백트래킹
- nodeJS
- 알고리즘
- 스레드
- 자바스크립트
- 컴퓨터 통신
- nest.js
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |