해결된 질문
작성
·
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를 가져와서 구조분해를 했다는 의미입니다
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를 가져온 것이죠.
아 제가 잘못 이해한 부분이 있었네요. 감사합니다.