node 라는 폴더에 node.js라는 파일 안에
const a = 1
const b = 1
라고 저장해놓고 이걸 다른 파일에서도 쓰고 싶다 - module로 지정해놓으면 됨
module.exports = {a,b} *모듈은 파일 하나당 한번밖에 못쓰기 때문에 여러개 보낼거면 객체나 배열같은걸로 묶으면 됨
다시 index.js에서 저 두 변수를 쓰고 싶다라고 하면 require(모듈 설정해놓은 파일 위치)라는 함수를 사용해주면 됨
const {a,b} = require('./node.js') // 구조분해할당으로 써줘도 되고 다르게 써줘도 됨
여기서 . -> 내가 지금 있는 이 파일 .. -> 부모 파일 이런식으로 올리가는거고 node.js에서 js는 생략 가능
module.exports === module (=== {})
exports.a = 1
exports.b = 1 해줘도 되긴하는데 module.exports랑 exports랑 원래는 같은 거라서 (빈 객체같은거) 잘못 넣게되면 두개가 같은 객체를 가리키는게 안되기 때문에(참조 관계가 깨짐) 그냥 쓸거면 하나만 쓰는걸로..
node에선 this도 좀 다름
this.js파일에서 실행
아까 위에서 빈 객체는 ? module.exports였음
한마디로 this === module.exports라는 소리
새 파일에 require('./index.js') 하게 되면 - 새 파일에서 저 index 파일을 실행시키겠다는 소리
여기에 const a = require('./index.js') 해줘야 모듈로 보내준 값들을 a에 저장한다는 소리임
어떤 파일에서든 require(this.js) 해주면 저 두개의 콘솔이 찍혀나오게 됨
require를 콘솔에 찍어보면 몇십줄이 뜨는데 여기서 main과 cache를 보면 됨
main - 내가 지금 실행하고 있는 파일
cache - 파일을 읽고 난 후에 캐시에 그 파일에 대한 정보를 저장해놓음 - 두 번째 불러올 때는 캐시에 저장된 메모리에서 불러옴(효율 측면에서 좋음)
1.js - require(2)
2.js - require(1) 이라고 해놓고 터미널에서 node 1 하게 되면
1에서 2읽고 - 다시 2에서는 1 읽고 - 1에서 2 읽고 ... 하는 순환참조가 일어남
그래서 이런 상황이 오면 노드에서는 순환참조를 막아주긴 함 -
modules.exports해서 내용 해놨어도 이걸 읽어오는 게 아니라 그냥 빈 객체를 막아줌
'node.JS' 카테고리의 다른 글
백준 9012. 스택 구현 (0) | 2023.02.27 |
---|---|
express 용어 정리 (0) | 2023.02.27 |
코테연습 - 숫자 짝꿍 (0) | 2023.02.12 |
코테연습 - 햄버거 만들기 (0) | 2023.02.07 |
API (0) | 2023.01.13 |