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.5package.json 안에는 예전 방식의 설정이 남아 있었다.
"pnpm": { "onlyBuiltDependencies": ["esbuild", "sharp"]}pnpm 11부터 이 설정의 집이 pnpm-workspace.yaml 로 이사했고, 키 이름도
allowBuilds(불리언)로 바뀌었다. 그래서 옛 필드는 무시됐고, 네이티브 바이너리를
빌드해야 하는 sharp·esbuild 의 postinstall 스크립트가 보안상 차단된 상태로 남았다.
해결 과정
옛 pnpm 필드를 제거
package.json의 pnpm.onlyBuiltDependencies 는 pnpm 11에서 더 이상 읽히지 않아 경고만 남겼다.
package.json에서 pnpm 필드를 통째로 삭제하고, 설정을 pnpm-workspace.yaml 로 옮겼다.
allowBuilds 로 빌드 허용
pnpm 11은 install 시 빌드 스크립트를 기본 차단한다. onlyBuiltDependencies 키만으로는 11.x에서 빌드가 계속 막혔다.
pnpm-workspace.yaml 에 allowBuilds: { esbuild: true, sharp: true } 를 적고 pnpm install --force 로 재적용했다.
캐시된 ignoredBuilds 갱신
설정을 고쳐도 node_modules/.modules.yaml 에 첫 설치 때의 ignoredBuilds 가 캐시로 남아 경고가 사라지지 않았다.
--force 로 다시 설치하자 sharp install: Done / esbuild postinstall: Done 이 찍히며 경고가 사라졌다.
최종 설정
allowBuilds: esbuild: true sharp: true같은 의도(“이 두 패키지의 빌드 스크립트를 허용한다”)인데 설정을 적는 위치와 문법만 최신 규격으로 옮긴 것이다. 누군가의 실수가 아니라, pnpm이 10 → 11로 올라오며 생긴 자연스러운 마이그레이션이었다.
배운 것
- pnpm 11은 빌드 스크립트를 기본 차단한다 — 네이티브 의존성(
sharp,esbuild등)은 명시적으로 허용해야 한다. - 설정을 고쳐도
.modules.yaml캐시 때문에 즉시 반영되지 않을 수 있다.--force가 확실하다. - CI(
--frozen-lockfile)와 pnpm 버전을 로컬과 맞춰두면 “내 PC에선 됐는데” 류 사고를 줄일 수 있다.