인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

roider2316님의 프로필 이미지
roider2316

작성한 질문수

[개정3판] Node.js 교과서 - 기본부터 프로젝트 실습까지

라이브러리 코드 타이핑하기

ES모듈 전환 질문

해결된 질문

작성

·

197

0

제가 지금까지 이해한 바로는, esModuleInterop를 true로 설정하면 CommonJS모듈에서 내보내기 한 것들을 ES모듈의 내보내기 한 것으로 변환 시켜주는데 CommonJS에선 module.exports나 exports.변수 나 둘 다 하나의 객체로 담겨져 보내지니 ES모듈의 내보내기로 전환될 땐 무조건 Default Export 방식으로 전환되는 것으로 알고있습니다. 그래서 ES모듈로 가져오는 것으로 바꿔줄 때에도 그냥 Default Export 를 가져오는 방식으로만 변환해주면 되는 것으로 아는데

const { Strategy: LocalStrategy } = require("passport-local");
이 부분을
import { Strategy as LocalStrategy } from "passport-local"
이렇게 Named Export를 가져오는 방식으로 바꾸는 것이 가능한 게 이해가 되질 않습니다.

import Strategy as from "passport-local" 이렇게 가져와서 따로 구조분해를 해야 하는 것이 아닌가요?

답변 1

1

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

import { Strategy as LocalStrategy } from "passport-local"

이거 자체가 module.exports를 가져와서 구조분해를 했다는 의미입니다

roider2316님의 프로필 이미지
roider2316
질문자

아 제가 잘못 이해한 부분이 있었네요. 감사합니다.

roider2316님의 프로필 이미지
roider2316
질문자

passport 모듈은

import passport from "passport"; 

이렇게 가져왔고 passport-local 모듈은

import { Strategy as LocalStrategy } from "passport-local";

이렇게 가져왔는데 왜 다르게 가져오는 것인지 아직 이해가 되지 않습니다.

모듈의 소스코드를 봐서 어떻게 CommonJS내보내기를 했는지를 봐야 하는 것인지, @types의 소스코드를 봐서 어떻게 ES내보내기를 했는지를 봐야 하는 것인지, 아니면 가져오는 방식에 맞춰서 타입스크립트가 알아서 변환시켜주는 것인지 모르겠는데 뭘 보고 판단해야 하나요?

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

import passport는 module.exports = passport를 가져온 것이고

import { Strategy }는 exports.Strategy나 module.exports.Strategy를 가져온 것이죠.

roider2316님의 프로필 이미지
roider2316
질문자

이해되었습니다. 감사합니다.

roider2316님의 프로필 이미지
roider2316

작성한 질문수

질문하기