Skip to main content

Command Palette

Search for a command to run...

Cjs 최적화 패스 작업 기록

Updated
1 min read

간단한 PR이었기는 한데 그래도 기록해두려고 한다. 작업을 시작한 건 슬랙에서 middleware 번들 사이즈 관련 얘기가 나와서다. next의 일부분만 임포트하는데 cjs로 컴파일 되어있어서 트리 셰이킹이 작동하지 않는다는 얘기였다. cjs 모듈을 직접 짜는 사람은 거의 없고 대부분 ESM으로 임포트한 뒤 common js로 컴파일하니까, 패턴을 인식해서 최적화 할 수 있을 것 같다고 했다.

그래서 내가 구현해주겠다고 하고 작업 시적했다. 일단 require 호출을 인식하는 비지터를 만들고 modularize-import의 코드를 베껴와서 require 호출을 변경해도록 했다. 코드를 베껴오는 건 내 전문이라 진짜 금방 했다. 그런데 테스트를 추가하고 리뷰 요청하니까 설정이 더 자세해야한다고 얘기했다. 내가 구현한 설정은 modularize-import랑 똑같았다.

{
  "packages": {
    "next/server": {
      "transform": "next/server/{{ kebabCase member }}"
    }
  }
}

이게 설정인데, next/server 같은 경우

const serverExports = {
  NextRequest: require("next/dist/server/web/spec-extension/request")
    .NextRequest,
  NextResponse: require("next/dist/server/web/spec-extension/response")
    .NextResponse,
  ImageResponse: require("next/dist/server/web/spec-extension/image-response")
    .ImageResponse,
  userAgentFromString: require("next/dist/server/web/spec-extension/user-agent")
    .userAgentFromString,
  userAgent: require("next/dist/server/web/spec-extension/user-agent")
    .userAgent,
};

처럼 컴파일된다더라. 그래서 아예 모든 걸 직접 설정할 수 있게 바꿨다. 설정 코드가 좀 길어지겠지만 별 수 없는 상황이었다.

{
  "packages": {
    "next/server": {
      "transforms": {
        "Response": "next/server/response"
      }
    }
  }
}

새로 구현된 설정은 이런 식이다. require('next/server').Responsenext/server/response로 컴파일하라는 뜻이다. 물론 require한 결과물을 변수에 할당했다가 사용하는 경우를 지원하는 것이다. 여기까지 하고 리뷰 요청했는데, 리뷰 보니까 내가 새로 구현한 패스를 next-swc랑 연결하는 걸 까먹었더라. unresolved_mark를 어떻게 넘겨야하는지 모르겠다고 하셔서 내가 고치고 다시 리뷰 요청했다.

More from this blog

한국의 학벌에 대한 생각

내 블로그의 제목이 kdy1: The way I think 인만큼 앞으로는 내 생각을 더 자주 올리려고 한다. 한국 기준으로, 학벌은 사람을 볼 때 꽤나 유용한 지표이지만, 절대적이지는 않다. 경험적인 얘기일 뿐이지만, 성균관대학교 자퇴생으로서 느낀 것들이 몇 가지 있다. 대학까지 간 사람의 학벌은 학습 능력 x 성실함 에 대체로 비례한다. 그래서 의미가

Apr 3, 20261 min read

인간 지능에 대한 메모장

최종 업데이트: 2026/03/15 지능의 유전 현재 인류 기준으로, 고지능자는 고지능 유전자가 많이 겹친 사람이다. 지능의 유전엔 X 염색체가 매우 중요한 역할을 한다. 그리고 이게 남자와 여자의 지능 분포 차이를 만든다. 극상위권에 여자가 거의 없는 이유가 이것이다. 고지능 X 염색체가 여자한테서 발현되려면 2개가 있어야 한다. 이는 인간의 생

Mar 15, 20262 min read

Ai 코딩 팁 2 (한국어)

발표 자료: https://gamma.app/docs/AI--2a52e7tk3eb1ch1 AI 활용법 관련해서 간단하게 발표를 했다. 발표 자료 앞쪽은 전에 블로그에 올린 글이랑 같은 내용이다. 이 글에서는 기존 글에서 다루지 않은 내용들을 다루겠다. 에러 메시지 및 로깅 구체적 타입 및 스키마 활용 any 타입은 사람에게도 위험하지만, AI에게는 더 위험하다. 마찬가지로, JSON.parse처럼 아무 제약 없는 파싱 느슨한 인터페이스 ...

Jan 30, 20265 min read

kdy1: The way I think

233 posts