Skip to content

post(blog): package.json exports 진입점 설계 포스트 추가 (#56) - #138

Merged
Malloc72P merged 2 commits into
mainfrom
claude/issue-56-package-exports
Jul 29, 2026
Merged

post(blog): package.json exports 진입점 설계 포스트 추가 (#56)#138
Malloc72P merged 2 commits into
mainfrom
claude/issue-56-package-exports

Conversation

@Malloc72P

Copy link
Copy Markdown
Owner

개요

#56 이슈의 주제로, package.jsonexports 필드로 패키지 진입점을 설계하는 포스트를 추가했습니다.

  • 파일: apps/blog/src/app/(main)/posts/frontend/package-json-exports/page.mdx
  • 시리즈: frontend / postId: package-json-exports

다루는 내용

  • main의 한계 — 진입점만 안내할 뿐 내부 파일 접근을 막지 못해, 소비자가 내부 구조에 의존하게 되는 문제
  • exports의 옵트인 캡슐화 — 적어둔 경로만 열리고 나머지는 차단(ERR_PACKAGE_PATH_NOT_EXPORTED), ./package.json도 함께 막히는 점
  • 조건부 진입점import/require/types 분기, 그리고 조건은 적힌 순서대로 첫 매칭 하나만 쓰인다는 규칙(default를 위에 두면 뒤가 죽음)
  • types 순서 — 순서에 따라 어느 선언 파일이 이기는지 달라져 TS2322가 발생하는 사례
  • 서브패스 — CSS·데이터 파일 진입점, 패턴 서브패스(*)의 확장자 설계와 .json.json 함정

검증

모든 동작을 실제 패키지를 만들어 Node(v22)와 tsc(5.5.4)로 재현 확인했습니다.

  • main만 있을 때 내부 파일 deep import가 실제로 통과함을 확인
  • exports 도입 후 동일 경로가 ERR_PACKAGE_PATH_NOT_EXPORTED로 차단됨을 확인(문자열 축약형·객체형 모두)
  • import/require 조건이 서로 다른 빌드로 해석됨을 확인
  • default를 맨 위에 두면 뒤의 import 조건이 무시됨을 확인
  • types 순서에 따라 적용되는 선언 파일이 바뀌어 TS2322가 나는 것을 tsc로 재현
  • 서브패스 패턴 두 방식(*.json vs *)의 동작 차이와 .json.json 오류를 모두 재현
  • pnpm run build 통과(정적 페이지 생성 확인), pnpm run lint 통과

본문에서 "types를 맨 위에 두지 않으면 타입을 못 찾는다"는 통설은 실제 확인 결과 정확하지 않아(TS는 선언을 못 찾으면 다음 조건으로 폴백함), **"엉뚱한 선언 파일이 먼저 매칭된다"**는 실제 메커니즘으로 바로잡아 서술했습니다.

Closes #56

- main의 한계(내부 파일 노출)와 exports의 옵트인 캡슐화 대비
- import/require/types 조건부 진입점과 조건 순서 규칙, 서브패스 패턴 정리
- 모든 동작을 Node·tsc로 직접 재현 검증(ERR_PACKAGE_PATH_NOT_EXPORTED, 확장자 함정 포함)
@vercel

vercel Bot commented Jul 29, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

1 Skipped Deployment
Project Deployment Actions Updated (UTC)
blog Ignored Ignored Preview Jul 29, 2026 1:21am

- 'Node로 확인' → types 검증은 tsc였으므로 Node와 TypeScript로 정정
- '키 이름이 아니라 순서로 매칭' 과장 표현을 실제 규칙에 맞게 수정
- JSON import의 with 구문이 Node 22 기준임을 주석에 명시
@Malloc72P
Malloc72P merged commit 9af106f into main Jul 29, 2026
3 checks passed
@Malloc72P
Malloc72P deleted the claude/issue-56-package-exports branch July 29, 2026 06:24
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

package.json exports로 모듈 진입점과 서브패스 설계하기

1 participant