본문 바로가기
Q&A해결2026년 4월 29일1분 읽기

Bun 2.0에서 모노레포 workspaces가 동작 안 합니다 (NestJS + Next.js)

모
모노레포러버
조회 421댓글 3

npm/pnpm로 잘 돌던 모노레포를 Bun으로 옮기려고 합니다. 구조는:

apps/
  web/    # Next.js 16
  api/    # NestJS
packages/
  shared/  # 공유 타입
  ui/      # 공유 컴포넌트

bun install은 잘 되는데, apps/web에서 import { Button } from '@scope/ui' 하면 모듈을 못 찾습니다. 루트 package.json에 "workspaces": ["apps/*", "packages/*"]는 있어요.

댓글 3

김김영삼6개월 전

Bun 2.0은 npm/pnpm와 workspace 동작이 미묘하게 다릅니다. 4가지를 체크하세요.


1) 워크스페이스 패키지의 package.json 확인


// packages/ui/package.json
{
"name": "@scope/ui",
"version": "0.0.0",
"main": "./src/index.ts", // ← 빌드 안 한다면 .ts 그대로
"types": "./src/index.ts",
"exports": {
".": {
"bun": "./src/index.ts", // Bun 우선
"import": "./dist/index.js",
"types": "./src/index.ts"
}
}
}

Bun은 main보다 exports를 우선 봅니다. exports 필드 누락이 가장 흔한 원인.


2) 의존성 명시


// apps/web/package.json
{
"dependencies": {
"@scope/ui": "workspace:*" // ← 이거 빼먹으면 못 찾음
}
}

3) tsconfig paths 동기화


// apps/web/tsconfig.json
{
"compilerOptions": {
"paths": {
"@scope/ui": ["../../packages/ui/src"],
"@scope/ui/*": ["../../packages/ui/src/*"]
}
}
}

4) Next.js 16 transpilePackages


// apps/web/next.config.js
module.exports = {
transpilePackages: ['@scope/ui'], // 워크스페이스 패키지가 .ts라면 필수
}

이 4가지 다 맞으면 동작합니다. 한 번에 안 되면 rm -rf node_modules bun.lockb && bun install로 클린 install 해보세요.

풀풀스택지훈6개월 전

저도 비슷한 이슈 겪었는데 한 가지만 더 추가하면 — Bun 2.0의 catalog 프로토콜을 같이 쓰면 의존성 버전 통일이 훨씬 쉬워져요.


// 루트 package.json
{
"workspaces": {
"packages": ["apps/*", "packages/*"],
"catalog": {
"react": "^19.2.0",
"typescript": "^6.0.0"
}
}
}

// apps/web/package.json
{
"dependencies": {
"react": "catalog:",
"@scope/ui": "workspace:*"
}
}

모든 워크스페이스가 같은 React 버전을 쓰게 강제됩니다. 듀얼 React 인스턴스 문제 자동 방지.

모모노레포러버(guest)6개월 전
exports 필드 빼먹은 게 원인이었습니다. 추가하니 바로 인식됐어요. catalog 프로토콜도 처음 알았는데 도입해보겠습니다. 두 분 다 감사합니다!
Ctrl+Enter로 등록