Archive
글 목록

pnpm 11로 올라오며 만난 allowBuilds 함정

·
pnpmcorepack빌드트러블슈팅

Corepack으로 pnpm을 설치하고 install 했더니 esbuild·sharp 빌드가 막혔다. 설정이 옛 문법이었던 게 원인이었고, pnpm 11의 새 규격으로 옮겨 해결한 기록.

Corepack으로 pnpm을 설치하고 프로젝트에서 pnpm i 를 돌렸더니, 설치는 됐지만 경고 두 개가 따라왔다. 결론부터 말하면 프로젝트 설정이 옛 pnpm 문법으로 쓰여 있던 것이 원인이었고, pnpm 11 규격으로 옮겨서 해결했다.

pnpm

11.9.0

로컬 / Corepack

막힌 빌드

2개

esbuild · sharp

해결

설정 이전

package.json → workspace

무엇이 잘못됐나

pnpm i 출력 끝에 두 줄이 떴다.

[WARN] The "pnpm" field in package.json is no longer read by pnpm.
[ERR_PNPM_IGNORED_BUILDS] Ignored build scripts: esbuild@0.27.7, sharp@0.34.5

package.json 안에는 예전 방식의 설정이 남아 있었다.

"pnpm": {
"onlyBuiltDependencies": ["esbuild", "sharp"]
}

pnpm 11부터 이 설정의 집이 pnpm-workspace.yaml 로 이사했고, 키 이름도 allowBuilds(불리언)로 바뀌었다. 그래서 옛 필드는 무시됐고, 네이티브 바이너리를 빌드해야 하는 sharp·esbuild 의 postinstall 스크립트가 보안상 차단된 상태로 남았다.

해결 과정

01

옛 pnpm 필드를 제거

package.json의 pnpm.onlyBuiltDependencies 는 pnpm 11에서 더 이상 읽히지 않아 경고만 남겼다.

package.json에서 pnpm 필드를 통째로 삭제하고, 설정을 pnpm-workspace.yaml 로 옮겼다.

참고 시각 자료
02

allowBuilds 로 빌드 허용

pnpm 11은 install 시 빌드 스크립트를 기본 차단한다. onlyBuiltDependencies 키만으로는 11.x에서 빌드가 계속 막혔다.

pnpm-workspace.yaml 에 allowBuilds: { esbuild: true, sharp: true } 를 적고 pnpm install --force 로 재적용했다.

참고 시각 자료
03

캐시된 ignoredBuilds 갱신

설정을 고쳐도 node_modules/.modules.yaml 에 첫 설치 때의 ignoredBuilds 가 캐시로 남아 경고가 사라지지 않았다.

--force 로 다시 설치하자 sharp install: Done / esbuild postinstall: Done 이 찍히며 경고가 사라졌다.

참고 시각 자료

최종 설정

pnpm-workspace.yaml
allowBuilds:
esbuild: true
sharp: true

같은 의도(“이 두 패키지의 빌드 스크립트를 허용한다”)인데 설정을 적는 위치와 문법만 최신 규격으로 옮긴 것이다. 누군가의 실수가 아니라, pnpm이 10 → 11로 올라오며 생긴 자연스러운 마이그레이션이었다.

배운 것

  • pnpm 11은 빌드 스크립트를 기본 차단한다 — 네이티브 의존성(sharp, esbuild 등)은 명시적으로 허용해야 한다.
  • 설정을 고쳐도 .modules.yaml 캐시 때문에 즉시 반영되지 않을 수 있다. --force 가 확실하다.
  • CI(--frozen-lockfile)와 pnpm 버전을 로컬과 맞춰두면 “내 PC에선 됐는데” 류 사고를 줄일 수 있다.