이제 막 Node.js를 공부하기 시작했다.
간단한 오픈 소스를 clone 해서 테스트 해보고 있는데, 이런 코드를 보았다.
import { Server } from "socket.io";
Named Export 형태가 좀 헷갈렸고, 이와 관련해서 정리를 해보고자 한다.
✨ Default Export (기본 내보내기)
먼저 Default Export에 대해 간단한 예시를 살펴보자.
// math.js
export default function add(a, b) {
return a + b;
}
// main.js
import add from './math.js'; // 중괄호 없이 가져옴
console.log(add(2, 3)); // 5
- 이와 같은 경우 모듈에서 하나의 값만 내보낼 수 있음
- 가져올 때 임의의 이름을 사용 할 수 있음
✨ Named Export (명명된 내보내기)
이번에는 Named Export에 대한 간단한 예시를 살펴보자
// math.js
export function add(a, b) {
return a + b;
}
export function subtract(a, b) {
return a - b;
}
// main.js
import { add, subtract } from './math.js'; // 중괄호를 사용
console.log(add(2, 3)); // 5
console.log(subtract(5, 3)); // 2
- 모듈에서 여러 값을 내보낼 수 있음
- 가져올 때 정확한 이름을 사용해야 함
정리하자면 Default Export 같은 경우 하나만 내보내기 때문에 이름이 중요하지 않고,
Named Export 같은 경우 여러개를 내보내기 때문에 이름이 중요하다.
🔗Named과 Default export 구분하기
그렇다면 그 모듈이 Named Export인지 아닌지를 어떻게 알 수 있을까 ?
ex) socket.io
// test.js
import * as Module from "socket.io"
console.log(Module);
단순하게 위에처럼 작성해주면, 아래와 같은 결과가 출력이 된다.
$ node test.js
[Module: null prototype] {
Namespace: [class Namespace extends StrictEventEmitter],
Server: [class Server extends StrictEventEmitter],
Socket: [class Socket extends StrictEventEmitter]
}
그렇다면 socket.io 라이브러리에서 Namespace, Server, Socket 같은거를 호출 할 때에는
Named Export 형태로 출력해야한다.
🔗 원하는 텍스트 찾기
해당 클래스를 찾고 싶으면 아래와 같은 명령어로 쉽게 찾을 수 있다.
(Vs Code 검색창에서도 잘 안찾아질때, 이렇게 찾으면 엄청 편하다 !! )
grep -r "찾고자 하는 이름" <경로>
- grep은 Global Regular Expression Print
- 전체 텍스트에서 정규 표현식으로 검색 후 출력
- -r 은 Reculsive로 재귀적으로 디렉토리 내 모든 파일 검색
ex) Server 클래스를 찾는 경우
grep -r "class Server" node_modules/socket.io
[출력 결과]
$ grep -r "class Server" node_modules/socket.io
node_modules/socket.io/dist/index.d.ts:export declare class Server<
node_modules/socket.io/dist/index.js:class Server extends typed_events_1.StrictEventEmitter {
- Server 클래스는 node_modules/socket.io/dist/index.js이 경로에 존재
'Node.js' 카테고리의 다른 글
싱글톤 패턴 (Singleton 패턴) (0) | 2024.12.16 |
---|---|
Java script에서 Promise 란 ? (+@ Async / Await) (0) | 2024.12.12 |