|
| 1 | +--- |
| 2 | +title: "2026-05-24: pnpm 11.1 ~ 11.3, npm CLI v11.15.0, Deno 2.8" |
| 3 | +author: "azu" |
| 4 | +translator: rewrite0w0 |
| 5 | +layout: post |
| 6 | +date: 2026-05-25T01:03:40.989Z |
| 7 | +category: JSer |
| 8 | +tags: |
| 9 | +- pnpm |
| 10 | +- npm |
| 11 | +- nodejs |
| 12 | +- security |
| 13 | +- CLI |
| 14 | + |
| 15 | +--- |
| 16 | + |
| 17 | +JSer.info #772 - pnpm 11.1부터 11.3까지, 공급망 보안 관련 기능이 다수 추가되었다. |
| 18 | + |
| 19 | +- [Release pnpm 11.1 · pnpm/pnpm](https://github.com/pnpm/pnpm/releases/tag/v11.1.0) |
| 20 | +- [Release pnpm 11.1.3 · pnpm/pnpm](https://github.com/pnpm/pnpm/releases/tag/v11.1.3) |
| 21 | +- [pnpm 11.3 | pnpm](https://pnpm.io/blog/releases/11.3) |
| 22 | + |
| 23 | +pnpm 11.1에는 레지스트리 서명 검증하는 `pnpm audit signatures` 명령어가 추가되고, 11.1.3에는 설치할 때 lockfile의 엔트리를 `minimumReleaseAge`으로 재검증하는 구조로 `minimumReleaseAgeStrict` 모드 도입된다. 11.3에는 Staged Publishing용 `pnpm stage` 명령어와, 신뢰된 lockfile 검증 스킵하는 `trustLockfile` 설정이 추가된다. |
| 24 | + |
| 25 | +--- |
| 26 | + |
| 27 | +npm CLI v11.15.0가 출시되었다. |
| 28 | + |
| 29 | +- [Release v11.15.0 · npm/cli](https://github.com/npm/cli/releases/tag/v11.15.0) |
| 30 | + |
| 31 | +Staged Publishing위한 `npm stage` 명령어 추가된다. Staged Publishing은, 패키지 공개 전에 승인 단계를 추가하는 구조로, 스테이징으로 송신한 후에 관리자가 2FA로 승인하고 레지스트리 공개된다. 또한, 설치할 때 행동을 제어하는 `allow-git`/`allow-file`/`allow-directory`/`allow-remote` 설정이 추가된다. |
| 32 | + |
| 33 | +- [Staged publishing for npm packages](https://docs.npmjs.com/staged-publishing) |
| 34 | + |
| 35 | +--- |
| 36 | + |
| 37 | +Deno 2.8가 출시되었다. |
| 38 | + |
| 39 | +- [Deno 2.8 | Deno](https://deno.com/blog/v2.8) |
| 40 | + |
| 41 | +`deno audit fix`, `deno bump-version`, `deno ci`, `deno pack`, `deno transpile`, `deno why` 같은 새로운 서브명령어가 추가된다. Node.js 호환성 테스트스위트 합격률이 42%에서 76.4%으로 개선, Stage 3의 `import defer`를 구현했다. 또한, CLI으로 `npm:` 프레픽스가 필요없어지고, `catalog:` 프로토콜에서 모노레포 의존 버전을 일원화 관리한다. |
| 42 | + |
| 43 | +---- |
| 44 | +{% include inline-support.html %} |
| 45 | + |
| 46 | +---- |
| 47 | +<h1 class="site-genre">헤드라인</h1> |
| 48 | + |
| 49 | +---- |
| 50 | + |
| 51 | +## Release v1.60.0 · microsoft/playwright |
| 52 | +[github.com/microsoft/playwright/releases/tag/v1.60.0](https://github.com/microsoft/playwright/releases/tag/v1.60.0 "Release v1.60.0 · microsoft/playwright") |
| 53 | +<p class="jser-tags jser-tag-icon"><span class="jser-tag">playwright</span> <span class="jser-tag">ReleaseNote</span></p> |
| 54 | + |
| 55 | +playwright v1.60.0 출시. |
| 56 | +파괴적 변경으로, `Locator.ariaRef()`, bindings의 `handle` 옵션, `videosPath`/`videoSize` 같은 deprecated한 API 삭제. |
| 57 | +`tracing.startHar()`/`tracing.stopHar()`으로 HAR 기록 지원, 외부에서 드랙&드롭을 시뮬레이터 하는 `locator.drop()` 추가. |
| 58 | +`expect(page).toMatchAriaSnapshot()`를 Page에서 이용 가능, `boxes` 옵션으로 경계 박스 정보 포함. |
| 59 | +테스트를 중단하는 `test.abort()`, `browser.on('context')` 이벤트와 BrowserContext 라이프사이클 이벤트 추가 |
| 60 | + |
| 61 | + |
| 62 | +---- |
| 63 | + |
| 64 | +## Release pnpm 11.1 · pnpm/pnpm |
| 65 | +[github.com/pnpm/pnpm/releases/tag/v11.1.0](https://github.com/pnpm/pnpm/releases/tag/v11.1.0 "Release pnpm 11.1 · pnpm/pnpm") |
| 66 | +<p class="jser-tags jser-tag-icon"><span class="jser-tag">pnpm</span> <span class="jser-tag">ReleaseNote</span></p> |
| 67 | + |
| 68 | +pnpm v11.1.0 출시. |
| 69 | +레지스트리 서명을 검증하는 `pnpm audit signatures` 명령어, `namedRegistries`에 의한 레지스트리 프레픽스 지정(`gh:@acme/private` 등등) 지원. |
| 70 | +`pnpm bugs`/`pnpm owner` 명령어 추가. |
| 71 | +SBOM 사양 버전을 지정하는 `--sbom-spec-version`, 런타임 설치할 때 스킵하는 `--no-runtime` 플래그 추가. |
| 72 | + |
| 73 | + |
| 74 | +---- |
| 75 | + |
| 76 | +## Release vite-plus v0.1.21 — Create, Migrate & Local CLI Power-Up · voidzero-dev/vite-plus |
| 77 | +[github.com/voidzero-dev/vite-plus/releases/tag/v0.1.21](https://github.com/voidzero-dev/vite-plus/releases/tag/v0.1.21 "Release vite-plus v0.1.21 — Create, Migrate & Local CLI Power-Up · voidzero-dev/vite-plus") |
| 78 | +<p class="jser-tags jser-tag-icon"><span class="jser-tag">vite</span> <span class="jser-tag">CLI</span> <span class="jser-tag">Tools</span> <span class="jser-tag">ReleaseNote</span></p> |
| 79 | + |
| 80 | +vite-plus v0.1.21 출시. |
| 81 | +`vp pm` 명령어가 로컬 CLI으로 동작하고, `vp migrate`은 named catalogs 갈아 끼우기나`tsdown/client`의 import 자료형 설정 이행에 대응. |
| 82 | +`vp create`은 `@org` 형식 스코프 조건 템플릿 지원. |
| 83 | +Nushell 대응, `vp pm plugin`의 yarn 지원, `--provenance` 플래그, Windows의 `.cmd` 심경유의 PowerShell 실행 추가. |
| 84 | +pnpm v11+에서 `--ignore-scripts` 자동 부여, `vite-plus/pack/client` 추가 |
| 85 | + |
| 86 | + |
| 87 | +---- |
| 88 | + |
| 89 | +## Bun v1.3.14 | Bun Blog |
| 90 | +[bun.com/blog/bun-v1.3.14](https://bun.com/blog/bun-v1.3.14 "Bun v1.3.14 | Bun Blog") |
| 91 | +<p class="jser-tags jser-tag-icon"><span class="jser-tag">Bun</span> <span class="jser-tag">ReleaseNote</span></p> |
| 92 | + |
| 93 | +Bun v1.3.14 출시. |
| 94 | +이미지 리사이즈/회전/포맷 변환에 대응한 이미지 처리 API `Bun.Image` 추가. |
| 95 | +`Bun.serve()`가 HTTP/3 over QUIC에 대응, `fetch()`가 실험적으로 HTTP/2와 HTTP/3 프로토콜 지원. |
| 96 | +isolated linker의 globalStore 옵션 추가, 부모 프로세스 종료할 때 Bun 프로세스 트리 종료하는 `--no-orphans` 플래그 추가. |
| 97 | +Node.js v24 호환의 `process.execve()`, Windows에서 `Bun.Terminal`(ConPTY), FreeBSD/Android 공식 빌드 제공 |
| 98 | + |
| 99 | + |
| 100 | +---- |
| 101 | + |
| 102 | +## Release pnpm 11.1.3 · pnpm/pnpm |
| 103 | +[github.com/pnpm/pnpm/releases/tag/v11.1.3](https://github.com/pnpm/pnpm/releases/tag/v11.1.3 "Release pnpm 11.1.3 · pnpm/pnpm") |
| 104 | +<p class="jser-tags jser-tag-icon"><span class="jser-tag">pnpm</span> <span class="jser-tag">ReleaseNote</span></p> |
| 105 | + |
| 106 | +pnpm v11.1.3 출시. |
| 107 | +설치할 때 `pnpm-lock.yaml`의 엔트리를 `minimumReleaseAge`와 `trustPolicy`으로 재검증하도록 변경 `minimumReleaseAgeStrict` 모드 추가. |
| 108 | +`pnpm self-update`가 `minimumReleaseAge`를 존중하도록 변경, `NODE_AUTH_TOKEN` 미설정할 때 OIDC 인증 실패를 수정. |
| 109 | + |
| 110 | + |
| 111 | +---- |
| 112 | + |
| 113 | +## Node.js — Node.js 26.2.0 (Current) |
| 114 | +[nodejs.org/en/blog/release/v26.2.0](https://nodejs.org/en/blog/release/v26.2.0 "Node.js — Node.js 26.2.0 (Current)") |
| 115 | +<p class="jser-tags jser-tag-icon"><span class="jser-tag">nodejs</span> <span class="jser-tag">ReleaseNote</span></p> |
| 116 | + |
| 117 | +Node.js 26.2.0 출시. |
| 118 | +`fs.Stats`와 `BigIntStats`가 `Temporal.Instant` 지원, HTTP의 `writeInformation` 메서드로 임의의 1xx 상태 코드를 송신하도록. |
| 119 | +`stream.compose`가 Stable으로 변경, Web Cryptography API로 ML-DSA/ML-KEM/ChaCha20-Poly1305 알고리즘 추가 |
| 120 | + |
| 121 | + |
| 122 | +---- |
| 123 | + |
| 124 | +## Release v11.15.0 · npm/cli |
| 125 | +[github.com/npm/cli/releases/tag/v11.15.0](https://github.com/npm/cli/releases/tag/v11.15.0 "Release v11.15.0 · npm/cli") |
| 126 | +<p class="jser-tags jser-tag-icon"><span class="jser-tag">npm</span> <span class="jser-tag">CLI</span> <span class="jser-tag">ReleaseNote</span></p> |
| 127 | + |
| 128 | +npm CLI v11.15.0 출시. |
| 129 | +Staged Publishing 위한 `npm stage` 명령어 추가, `trust` 명령어로 permissions 지원 추가. |
| 130 | +설치할 때 행동을 제어하는 `allow-git`/`allow-file`/`allow-directory`/`allow-remote` 설정 추가. |
| 131 | + |
| 132 | +- [Staged publishing for npm packages](https://docs.npmjs.com/staged-publishing "Staged publishing for npm packages") |
| 133 | + |
| 134 | +---- |
| 135 | + |
| 136 | +## Release @apollo/client@4.2.0 · apollographql/apollo-client |
| 137 | +[github.com/apollographql/apollo-client/releases/tag/%40apollo%2Fclient%404.2.0](https://github.com/apollographql/apollo-client/releases/tag/%40apollo%2Fclient%404.2.0 "Release @apollo/client@4.2.0 · apollographql/apollo-client") |
| 138 | +<p class="jser-tags jser-tag-icon"><span class="jser-tag">JavaScript</span> <span class="jser-tag">library</span> <span class="jser-tag">ReleaseNote</span> <span class="jser-tag">GraphQL</span></p> |
| 139 | + |
| 140 | +Apollo Client 4.2.0 출시. |
| 141 | +hook이나 메서드의 시그니처에, `defaultOptions` 반영하는 "modern" 스타일 추가. |
| 142 | +`RefetchEventManager` 클래스 추가, window의 focus이나 네트워크 재연결같은 이벤트에 대응한 쿼리 자동재취득을 지원. |
| 143 | +`client.query`/`client.mutate`/`useMutation`/`preloadQuery` 반환값을 자료형에 `defaultOptions`을 반영하도록 개선. |
| 144 | + |
| 145 | + |
| 146 | +---- |
| 147 | + |
| 148 | +## pnpm 11.3 | pnpm |
| 149 | +[pnpm.io/blog/releases/11.3](https://pnpm.io/blog/releases/11.3 "pnpm 11.3 | pnpm") |
| 150 | +<p class="jser-tags jser-tag-icon"><span class="jser-tag">pnpm</span> <span class="jser-tag">ReleaseNote</span></p> |
| 151 | + |
| 152 | +pnpm 11.3 출시. |
| 153 | +Staged Publishing용으로 `pnpm stage` 명령어, 신뢰된 lockfile 검증을 스킵하는 `trustLockfile` 설정 추가. |
| 154 | +`pnpm pkg`/`pnpm repo`/`pnpm set-script`를 네이티브 구현으로 변경, `pnpm publish`으로 `--skip-manifest-obfuscation` 플래그 추가 |
| 155 | + |
| 156 | + |
| 157 | +---- |
| 158 | + |
| 159 | +## Deno 2.8 | Deno |
| 160 | +[deno.com/blog/v2.8](https://deno.com/blog/v2.8 "Deno 2.8 | Deno") |
| 161 | +<p class="jser-tags jser-tag-icon"><span class="jser-tag">deno</span> <span class="jser-tag">ReleaseNote</span></p> |
| 162 | + |
| 163 | +Deno 2.8 출시. |
| 164 | +`deno audit fix`/`deno bump-version`/`deno ci`/`deno pack`/`deno transpile`/`deno why` 새로운 서브 명령어 추가. |
| 165 | +Node.js 호환성 테스트 스위츠 합격률이 42%에서 76.4%으로 개선, Stage 3의 `import defer` 구현. |
| 166 | +CLI으로 `npm:` 프레픽스 필요없도록, `catalog:` 지원, `--os`/`--arch` 플래그로 크로스 플랫폼 설치에 대응. |
| 167 | +`OffscreenCanvas`이나 `DOMPoint` 같은 Web API 추가, Chrome DevTools에서 네트워크 디버그나 CPU 프로파일링을 지원. |
| 168 | + |
| 169 | + |
| 170 | +---- |
| 171 | +<h1 class="site-genre">읽읅거리</h1> |
| 172 | + |
| 173 | +---- |
| 174 | + |
| 175 | +## Postmortem: TanStack npm supply-chain compromise | TanStack Blog |
| 176 | +[tanstack.com/blog/npm-supply-chain-compromise-postmortem](https://tanstack.com/blog/npm-supply-chain-compromise-postmortem "Postmortem: TanStack npm supply-chain compromise | TanStack Blog") |
| 177 | +<p class="jser-tags jser-tag-icon"><span class="jser-tag">TanStack</span> <span class="jser-tag">npm</span> <span class="jser-tag">security</span> <span class="jser-tag">Actions</span> <span class="jser-tag">article</span></p> |
| 178 | + |
| 179 | +2026년 5월 11일에 발생한 TanStack의 npm 패키지 공급망 공격 포스트모템. |
| 180 | +`pull_request_target` 워크 플로우 설정 부족, GitHub Actions 캐쉬 포이즈닝을 얹은 공격 수법에 대하여. |
| 181 | +포크에서 PR을 실행한 코드가 pnpm 캐시를 오염시키고, 후에 출시 워크 플로우에 악의 있는 바이너리 복원시킴. |
| 182 | +`/proc/` 경유로 런너 프로세스 메모리에서 OIDC 토큰 추출해 npm publish에 이용됨. |
| 183 | +대책으로 `pull_request_target` 사용한 워크 플로우 감시, 서드파티 Action 커밋 해쉬 고정하는 방법 등 들고 있음. |
| 184 | + |
| 185 | + |
| 186 | +---- |
| 187 | + |
| 188 | +## 9 Times the Web Platform Was Influenced by Libraries | Jad Joubran |
| 189 | +[jadjoubran.io/blog/web-platform-influenced-by-libraries](https://jadjoubran.io/blog/web-platform-influenced-by-libraries "9 Times the Web Platform Was Influenced by Libraries | Jad Joubran") |
| 190 | +<p class="jser-tags jser-tag-icon"><span class="jser-tag">WebPlatformAPI</span> <span class="jser-tag">JavaScript</span> <span class="jser-tag">library</span> <span class="jser-tag">history</span> <span class="jser-tag">article</span></p> |
| 191 | + |
| 192 | +Web 플랫폼 네이티브 API가 라이브러리에 받은 영향 9가지 사례 소개하는 글. |
| 193 | +jQuery/Sizzle의 CSS 셀렉터가 `querySelector`, Bootstrap의 `data-toggle`이 `popovertarget`/`command` 속성. |
| 194 | +jQuery의 `.addClass()`가 `classList`, Lodash/Underscore 메서드가 `String`/`Array` 메서드로. |
| 195 | +추가로 `structuredClone`, Promises/A+ 표준화, ES Modules 설계. |
| 196 | +Moment.js 과제에서 `Temporal API`, jQuery의 `.closest()`에서 `Element.closest()`. |
| 197 | + |
| 198 | + |
| 199 | +---- |
| 200 | + |
| 201 | +## Node.js — Axios to WHATWG Fetch |
| 202 | +[nodejs.org/en/blog/migrations/axios-to-fetch](https://nodejs.org/en/blog/migrations/axios-to-fetch "Node.js — Axios to WHATWG Fetch") |
| 203 | +<p class="jser-tags jser-tag-icon"><span class="jser-tag">nodejs</span> <span class="jser-tag">Fetch</span> <span class="jser-tag">HTTP</span> <span class="jser-tag">article</span></p> |
| 204 | + |
| 205 | +Axios에서 Node.js Fetch API으로 이행 가이드. |
| 206 | +Node.js v18.0.0 이후 전제, `axios.get()`/`axios.post()`/`axios.put()`/`axios.delete()`이나 폼 송신 같은 코드 변환 예시로 설명. |
| 207 | +인터셉터나 캔슬 토큰 등 일부 기능은 미대응인 점에 대해서도 설명 |
| 208 | + |
| 209 | + |
| 210 | +---- |
| 211 | + |
| 212 | +## Introducing Secure Registry: install-time defense for the npm supply chain - StepSecurity |
| 213 | +[www.stepsecurity.io/blog/introducing-secure-registry-install-time-defense-for-the-npm-supply-chain](https://www.stepsecurity.io/blog/introducing-secure-registry-install-time-defense-for-the-npm-supply-chain "Introducing Secure Registry: install-time defense for the npm supply chain - StepSecurity") |
| 214 | +<p class="jser-tags jser-tag-icon"><span class="jser-tag">npm</span> <span class="jser-tag">security</span> <span class="jser-tag">article</span></p> |
| 215 | + |
| 216 | +StepSecurity에 의한 npm 공급망 공격에 대한 설치 방어하는 Proxy 타입 레지스트리 서비스. |
| 217 | +레지스트리 패키지 취득 요구를 프록시로 평가, 신규 공개에서 일정 시간 블록하는 쿨타임 기한, 위험한 패키지를 블록, typosquatting 대책 기능 제공. |
| 218 | +로컬 개발 환경, CI/CD 파이프라인에서 이용을 상정. |
| 219 | + |
| 220 | + |
| 221 | +---- |
| 222 | + |
| 223 | +## nkzw-tech/fate: fate is a modern data client for React. |
| 224 | +[github.com/nkzw-tech/fate](https://github.com/nkzw-tech/fate "nkzw-tech/fate: fate is a modern data client for React.") |
| 225 | +<p class="jser-tags jser-tag-icon"><span class="jser-tag">React</span> <span class="jser-tag">library</span> <span class="jser-tag">TypeScript</span> <span class="jser-tag">GraphQL</span></p> |
| 226 | + |
| 227 | +React 데이터 클라이언트 라이브러리. |
| 228 | +Relay/GraphQL 설계에서 영향을 받아, 컴포넌트째로 `view` 데이터 선언, 정규화 캐시와 데이터 마스킹 제공. |
| 229 | +Async React(Actions/Suspense/`use`) 대응, 페이지네이션, Optimistic Updates, Server-Sent Events 갱신 지원. |
| 230 | +백엔드로 GraphQL/tRPC/Prisma/Drizzle 대응. |
| 231 | + |
| 232 | + |
| 233 | +---- |
| 234 | + |
| 235 | +## Announcing Web Serial Support in Firefox - Mozilla Hacks - the Web developer blog |
| 236 | +[hacks.mozilla.org/2026/05/web-serial-support-in-firefox/](https://hacks.mozilla.org/2026/05/web-serial-support-in-firefox/ "Announcing Web Serial Support in Firefox - Mozilla Hacks - the Web developer blog") |
| 237 | +<p class="jser-tags jser-tag-icon"><span class="jser-tag">Firefox</span> <span class="jser-tag">browser</span> <span class="jser-tag">WebAPI</span> <span class="jser-tag">Mozilla</span></p> |
| 238 | + |
| 239 | +Firefox 151에서 Web Serial API 지원. |
| 240 | +Web Serial API은 JavaScript에서 시리얼라이즈 디바이스 읽는 API로, USB나 Bluetooth에서 접속한 마이콘, 3D 프린터, 스마트 메타 등 직접 접근 가능. |
| 241 | +유저가 명시적으로 허용하는 포트만 접근 가능, 사이트and포트 마다 권한 관리. |
| 242 | + |
| 243 | + |
| 244 | +---- |
| 245 | +<h1 class="site-genre">소프트웨어, 도구, 라이브러리</h1> |
| 246 | + |
| 247 | +---- |
| 248 | + |
| 249 | +## tmikov/hermes-node: Node.js built-in module compatibility layer for the Hermes JS engine |
| 250 | +[github.com/tmikov/hermes-node](https://github.com/tmikov/hermes-node "tmikov/hermes-node: Node.js built-in module compatibility layer for the Hermes JS engine") |
| 251 | +<p class="jser-tags jser-tag-icon"><span class="jser-tag">nodejs</span> <span class="jser-tag">JavaScript</span> <span class="jser-tag">TypeScript</span> <span class="jser-tag">library</span></p> |
| 252 | + |
| 253 | +Hermes를 기반으로 한 Node.js 호환 JavaScript/TypeScript 런타임. |
| 254 | +TypeScript 파일을 직접 실행, Chrome DevTools 프로토콜 대응한 디버그를 내장. |
| 255 | +`fs`/`http`/`net`/`path`/`stream` 같은 Node.js 코어 모듈은, Node.js 내부 JS 구현을 그대로 이용. |
| 256 | + |
| 257 | + |
| 258 | +---- |
0 commit comments