|
| 1 | +--- |
| 2 | +title: "2025-05-07: koa v3.0.0, Node.js 24とNode.js 18 EOL, `//# allFunctionsCalledOnLoad`" |
| 3 | +author: "azu" |
| 4 | +translator: rewrite0w0 |
| 5 | +layout: post |
| 6 | +date: 2025-05-07T00:31:48.346Z |
| 7 | +category: JSer |
| 8 | +tags: |
| 9 | +- nodejs |
| 10 | +- React |
| 11 | +- esbuild |
| 12 | +- Firefox |
| 13 | +- polyfill |
| 14 | + |
| 15 | +--- |
| 16 | + |
| 17 | +JSer.info #734 - Koa v3.0.0가 출시되었습니다. |
| 18 | + |
| 19 | +- [Release v3.0.0 · koajs/koa](https://github.com/koajs/koa/releases/tag/v3.0.0) |
| 20 | +- [koa/docs/migration-v2-to-v3.md at master · koajs/koa](https://github.com/koajs/koa/blob/master/docs/migration-v2-to-v3.md) |
| 21 | + |
| 22 | +Node.js 18 지원 종료, Generator 사용한 Middleware 지원 종료 등 파괴적 변경도 포함됩니다. 새로운 기능으로, `app.currentContext`으로 AsyncLocalStorage 사용해 현재 컨텍스트 얻는 방법 지원, `Blob`/`ReadableStream`/`Response` 지원, 커스텀 스트림 지원이 추가되었습니다. |
| 23 | + |
| 24 | +---- |
| 25 | + |
| 26 | +Node.jsのv24가 출시되었습니다. |
| 27 | + |
| 28 | +- [Node.js — Node v24.0.0 (Current)](https://nodejs.org/en/blog/release/v24.0.0) |
| 29 | + |
| 30 | +Node.js 24에는, V8 13.6으로 업데이트, npm 11 동봉, AsyncLocalStorage의 AsyncContextFrame이 기본값, `URLPattern` 글로벌 추가 변경이 포함됩니다. 또한, 퍼미션 모델이 `--permission` 플래그로 이용 가능합니다. |
| 31 | + |
| 32 | +또한, Node.js 18는 2025년 4월 30일로 EOL(End Of Support)가 됩니다. |
| 33 | + |
| 34 | +- [Node.js — Node.js Releases](https://nodejs.org/en/about/previous-releases) |
| 35 | + |
| 36 | +---- |
| 37 | + |
| 38 | +V8 엔진에 새로운 컴파일 힌트 구조가 구현됩니다. |
| 39 | + |
| 40 | +- [Giving V8 a Heads-Up: Faster JavaScript Startup with Explicit Compile Hints · V8](https://v8.dev/blog/explicit-compile-hints) |
| 41 | + |
| 42 | +`//# allFunctionsCalledOnLoad` 주석으로, JavaScript 파일의 eager compilation 지정 가능한 구조로 구현됩니다. 이로 인해, 파일 내 함수 컴파일링 타이밍을 제어할 수 있고, 기동 시 성능 최적화가 가능합니다. |
| 43 | +한 편, 뭐든지 컴파일하면 시간과 메모리 소비하므로 이 문제에 대해서도 다룹니다. |
| 44 | + |
| 45 | +- [WICG/explicit-javascript-compile-hints-file-based: This proposal introduces a new magic comment that signals to browsers that the functions in a JavaScript file are likely to be needed by the website. Spec draft: https://wicg.github.io/explicit-javascript-compile-hints-file-based/](https://github.com/WICG/explicit-javascript-compile-hints-file-based) |
| 46 | + |
| 47 | +---- |
| 48 | + |
| 49 | +{% include inline-support.html %} |
| 50 | + |
| 51 | +---- |
| 52 | + |
| 53 | +<h1 class="site-genre">헤드라인</h1> |
| 54 | + |
| 55 | +---- |
| 56 | + |
| 57 | +## react-router/CHANGELOG.md at main · remix-run/react-router |
| 58 | +[github.com/remix-run/react-router/blob/main/CHANGELOG.md#v752](https://github.com/remix-run/react-router/blob/main/CHANGELOG.md#v752 "react-router/CHANGELOG.md at main · remix-run/react-router") |
| 59 | +<p class="jser-tags jser-tag-icon"><span class="jser-tag">React</span> <span class="jser-tag">library</span> <span class="jser-tag">ReleaseNote</span></p> |
| 60 | + |
| 61 | +React Router v7.5.2 출시. |
| 62 | +`X-React-Router-Prerender-Data`헤더와 `X-React-Router-SPA-Mode` 헤더 관련 취약성 보안 수정 |
| 63 | + |
| 64 | +- [URL manipulation via Host / X-Forwarded-Host headers · Advisory · remix-run/react-router](https://github.com/remix-run/react-router/security/advisories/GHSA-4q56-crqp-v477 "URL manipulation via Host / X-Forwarded-Host headers · Advisory · remix-run/react-router") |
| 65 | +- [React Router and the Remix’ed path - zhero\_web\_security](https://zhero-web-sec.github.io/research-and-things/react-router-and-the-remixed-path "React Router and the Remix’ed path - zhero\_web\_security") |
| 66 | + |
| 67 | +---- |
| 68 | + |
| 69 | +## Release v0.25.3 · evanw/esbuild |
| 70 | +[github.com/evanw/esbuild/releases/tag/v0.25.3](https://github.com/evanw/esbuild/releases/tag/v0.25.3 "Release v0.25.3 · evanw/esbuild") |
| 71 | +<p class="jser-tags jser-tag-icon"><span class="jser-tag">esbuild</span> <span class="jser-tag">ReleaseNote</span></p> |
| 72 | + |
| 73 | +esbuild v0.25.3 출시. |
| 74 | +`--serve=` 옵션으로 커스텀 호스트 지정을 가능하도록, CSS Nesting 제어 추가 |
| 75 | + |
| 76 | + |
| 77 | +---- |
| 78 | + |
| 79 | +## Firefox 138.0, See All New Features, Updates and Fixes |
| 80 | +[www.mozilla.org/en-US/firefox/138.0/releasenotes/](https://www.mozilla.org/en-US/firefox/138.0/releasenotes/ "Firefox 138.0, See All New Features, Updates and Fixes") |
| 81 | +<p class="jser-tags jser-tag-icon"><span class="jser-tag">Firefox</span> <span class="jser-tag">ReleaseNote</span></p> |
| 82 | + |
| 83 | +Firefox 138 출시. |
| 84 | +`importmap`의 `integrity` 지원, `Error.captureStackTrace()` 지원, ES Proposal Stage 3의 `Error.isError()` 지원. |
| 85 | +Import Attributes 사용한 JSON의 import 지원, `Clear-Site-Data`에서 `cache` directive 지원. |
| 86 | +FedCM API의 Login Status API 지원, Web Audio API의 Message Port 지원. |
| 87 | +플래그 조건으로 MutationEvent 삭제, HTML Sanitizer API 지원 |
| 88 | + |
| 89 | +- [Firefox 138 for developers - Mozilla | MDN](https://developer.mozilla.org/en-US/docs/Mozilla/Firefox/Releases/138 "Firefox 138 for developers - Mozilla | MDN") |
| 90 | + |
| 91 | +---- |
| 92 | + |
| 93 | +## Release 3.42.0 - 2025.04.30 · zloirock/core-js |
| 94 | +[github.com/zloirock/core-js/releases/tag/v3.42.0](https://github.com/zloirock/core-js/releases/tag/v3.42.0 "Release 3.42.0 - 2025.04.30 · zloirock/core-js") |
| 95 | +<p class="jser-tags jser-tag-icon"><span class="jser-tag">JavaScript</span> <span class="jser-tag">polyfill</span> <span class="jser-tag">ReleaseNote</span></p> |
| 96 | + |
| 97 | +core-js v3.42.0 출시. |
| 98 | +Map upsert proposal 갱신, Iterator Helpers를 ES2025 사양에 포함하는 변경 |
| 99 | + |
| 100 | + |
| 101 | +---- |
| 102 | + |
| 103 | +## Deno 2.3: Improved deno compile, local npm packages, and more |
| 104 | +[deno.com/blog/v2.3](https://deno.com/blog/v2.3 "Deno 2.3: Improved deno compile, local npm packages, and more") |
| 105 | +<p class="jser-tags jser-tag-icon"><span class="jser-tag">deno</span> <span class="jser-tag">ReleaseNote</span></p> |
| 106 | + |
| 107 | +Deno v2.3 출시. |
| 108 | +`deno compile`로 FFI와 Node.js Native Addon 지원, 로컬 npm 패키지를 참조하도록, `deno fmt` 옵션 추가. |
| 109 | +Windows의 `deno` 바이너리에 코드 서명하도록 변경 |
| 110 | + |
| 111 | + |
| 112 | +---- |
| 113 | + |
| 114 | +## ESLint v9.26.0 released - ESLint - Pluggable JavaScript Linter |
| 115 | +[eslint.org/blog/2025/05/eslint-v9.26.0-released/](https://eslint.org/blog/2025/05/eslint-v9.26.0-released/ "ESLint v9.26.0 released - ESLint - Pluggable JavaScript Linter") |
| 116 | +<p class="jser-tags jser-tag-icon"><span class="jser-tag">ESLint</span> <span class="jser-tag">ReleaseNote</span></p> |
| 117 | + |
| 118 | +ESLint v9.26.0 출시. |
| 119 | +`eslint --mcp`에서 MCP서버로 기동하도록, `no-unused-expressions` 규칙에 `ignoreDirectives` 옵션 추가 |
| 120 | + |
| 121 | + |
| 122 | +---- |
| 123 | + |
| 124 | +## Electron 36.0.0 | Electron |
| 125 | +[www.electronjs.org/blog/electron-36-0](https://www.electronjs.org/blog/electron-36-0 "Electron 36.0.0 | Electron") |
| 126 | +<p class="jser-tags jser-tag-icon"><span class="jser-tag">Electron</span> <span class="jser-tag">ReleaseNote</span></p> |
| 127 | + |
| 128 | +Electron 36.0.0 출시. |
| 129 | +Chromium 136, V8 13.6, Node 22.14.0으로 업그레이드. |
| 130 | +macOS의 Writing Tools나 Autofill, Services 메뉴 지원하는 새로운 `menu.popup` 옵션 추가. |
| 131 | +GTK 4가 GNOME로 기본 변경. `NativeImage.getBitmap()` 비권장으로, `session.loadExtension` 비권장되고 `Extensions` 객체로 이동. |
| 132 | + |
| 133 | + |
| 134 | +---- |
| 135 | + |
| 136 | +## Release v3.0.0 · koajs/koa |
| 137 | +[github.com/koajs/koa/releases/tag/v3.0.0](https://github.com/koajs/koa/releases/tag/v3.0.0 "Release v3.0.0 · koajs/koa") |
| 138 | +<p class="jser-tags jser-tag-icon"><span class="jser-tag">nodejs</span> <span class="jser-tag">ReleaseNote</span></p> |
| 139 | + |
| 140 | +Koa v3.0.0 출시. |
| 141 | +Node.js 18 미만 지원 종료, Generator 사용한 Middlewa 지원 종료, `res.redirect('back')` 삭제 `ctx.back()` 추가. |
| 142 | +`app.currentContext`에서 AsyncLocalStorage 사용한 현재 컨텍스트 얻기 지원.`Blob`/`ReadableStream`/`Response` 지원, 커스텀 스트림 지원 |
| 143 | + |
| 144 | +- [koa/docs/migration-v2-to-v3.md at master · koajs/koa](https://github.com/koajs/koa/blob/master/docs/migration-v2-to-v3.md "koa/docs/migration-v2-to-v3.md at master · koajs/koa") |
| 145 | + |
| 146 | +---- |
| 147 | + |
| 148 | +## Node.js — Node.js Releases |
| 149 | +[nodejs.org/en/about/previous-releases](https://nodejs.org/en/about/previous-releases "Node.js — Node.js Releases") |
| 150 | +<p class="jser-tags jser-tag-icon"><span class="jser-tag">nodejs</span> <span class="jser-tag">news</span></p> |
| 151 | + |
| 152 | +Node.js 18는 2025년 4월 30일로 EOL(End Of Support). |
| 153 | + |
| 154 | + |
| 155 | +---- |
| 156 | + |
| 157 | +## Release 21.0.0 · nrwl/nx |
| 158 | +[github.com/nrwl/nx/releases/tag/21.0.0](https://github.com/nrwl/nx/releases/tag/21.0.0 "Release 21.0.0 · nrwl/nx") |
| 159 | +<p class="jser-tags jser-tag-icon"><span class="jser-tag">JavaScript</span> <span class="jser-tag">Tools</span> <span class="jser-tag">ReleaseNote</span></p> |
| 160 | + |
| 161 | +Nx 21.0.0 출시. |
| 162 | +Node.js 20.19.0 이상 필요, `outputStyle=compact` 삭제, `readWorkspaceConfig` 폐지 등 파괴적 변경 포함. |
| 163 | +continuous task 추가, 태스크용 Terminal UI 기능 추가, GitLab 출시 지원 |
| 164 | + |
| 165 | +- [RFC: Continuous Tasks · nrwl/nx · Discussion #29025](https://github.com/nrwl/nx/discussions/29025 "RFC: Continuous Tasks · nrwl/nx · Discussion #29025") |
| 166 | + |
| 167 | +---- |
| 168 | + |
| 169 | +## Release v0.25.4 · evanw/esbuild |
| 170 | +[github.com/evanw/esbuild/releases/tag/v0.25.4](https://github.com/evanw/esbuild/releases/tag/v0.25.4 "Release v0.25.4 · evanw/esbuild") |
| 171 | +<p class="jser-tags jser-tag-icon"><span class="jser-tag">esbuild</span> <span class="jser-tag">ReleaseNote</span></p> |
| 172 | + |
| 173 | +esbuild v0.25.4 출시. |
| 174 | +개발 서버에 `cors` 옵션에서 `Access-Control-Allow-Origin` 헤더를 설정 가능. |
| 175 | + |
| 176 | + |
| 177 | +---- |
| 178 | + |
| 179 | +## Node.js — Node v24.0.0 (Current) |
| 180 | +[nodejs.org/en/blog/release/v24.0.0](https://nodejs.org/en/blog/release/v24.0.0 "Node.js — Node v24.0.0 (Current)") |
| 181 | +<p class="jser-tags jser-tag-icon"><span class="jser-tag">nodejs</span> <span class="jser-tag">ReleaseNote</span></p> |
| 182 | + |
| 183 | +Node.js v24.0.0 출시. |
| 184 | +V8 13.6으로 업그레이드, npm 11 동봉, AsyncLocalStorage가 AsyncContextFrame를 기본적으로 사용하도록. |
| 185 | +`URLPattern` 글로벌 추가, 퍼미션 모델이 `--permission` 플래그 이용하게끔, 테스트 러너 개선, Undici 7 동봉. |
| 186 | +`url.parse()` 비권장으로 변경. |
| 187 | +2025년 10월에 LTS될 예정. |
| 188 | + |
| 189 | +- [What’s New with Node.js 24 | OpenJS Foundation](https://openjsf.org/blog/nodejs-24-released "What’s New with Node.js 24 | OpenJS Foundation") |
| 190 | + |
| 191 | +---- |
| 192 | +<h1 class="site-genre">읽을거리</h1> |
| 193 | + |
| 194 | +---- |
| 195 | + |
| 196 | +## 프론트엔드 API 콜할 때 에러 핸들링을 가볍게 정리(Fetch API・typescript-fetch・TanStack Query) - 카미나시 엔지니어 블로그 |
| 197 | +[kaminashi-developer.hatenablog.jp/entry/2025/04/30/080000](https://kaminashi-developer.hatenablog.jp/entry/2025/04/30/080000 "프론트엔드 API 콜할 때 에러 핸들링을 가볍게 정리(Fetch API・typescript-fetch・TanStack Query) - 카미나시 엔지니어 블로그") |
| 198 | +<p class="jser-tags jser-tag-icon"><span class="jser-tag">Fetch</span> <span class="jser-tag">TypeScript</span> <span class="jser-tag">JavaScript</span> <span class="jser-tag">article</span> <span class="jser-tag">HTTP</span></p> |
| 199 | + |
| 200 | +Fetch API/Open API의 `typescript-fetch`, TanStack Query의 Fetch 예외 처리에 대하여 |
| 201 | + |
| 202 | + |
| 203 | +---- |
| 204 | + |
| 205 | +## Giving V8 a Heads-Up: Faster JavaScript Startup with Explicit Compile Hints · V8 |
| 206 | +[v8.dev/blog/explicit-compile-hints](https://v8.dev/blog/explicit-compile-hints "Giving V8 a Heads-Up: Faster JavaScript Startup with Explicit Compile Hints · V8") |
| 207 | +<p class="jser-tags jser-tag-icon"><span class="jser-tag">JavaScript</span> <span class="jser-tag">V8</span> <span class="jser-tag">article</span></p> |
| 208 | + |
| 209 | +`//# allFunctionsCalledOnLoad` 주석으로, JavaScript 파일을 eager compilation 하는 구조를 V8에 구현한 이야기. |
| 210 | +JavaScript는 함수를 컴파일하려면 파일을 파싱할 필요가 있기에, 컴파일이 필요한지 판단하는데 시간이 걸림. 그래서, 파일 초반부에 주석으로 컴파일할 필요가 있다 판단 가능하도록 하게 하는 구조 |
| 211 | + |
| 212 | + |
| 213 | +---- |
| 214 | +<h1 class="site-genre">소프트웨어, 도구, 라이브러리</h1> |
| 215 | + |
| 216 | +---- |
| 217 | + |
| 218 | +## Intent UI |
| 219 | +[intentui.com/](https://intentui.com/ "Intent UI") |
| 220 | +<p class="jser-tags jser-tag-icon"><span class="jser-tag">React</span> <span class="jser-tag">UI</span> <span class="jser-tag">library</span></p> |
| 221 | + |
| 222 | +React Aria Components 기반 shadcn스러운 복사 붙여넣기 가능한 컴포넌트 라이브러리 |
| 223 | + |
| 224 | + |
| 225 | +---- |
| 226 | + |
| 227 | +## zumerlab/snapdom: snapDOM captures DOM nodes as images with exceptional speed and accuracy. |
| 228 | +[github.com/zumerlab/snapdom](https://github.com/zumerlab/snapdom "zumerlab/snapdom: snapDOM captures DOM nodes as images with exceptional speed and accuracy.") |
| 229 | +<p class="jser-tags jser-tag-icon"><span class="jser-tag">JavaScript</span> <span class="jser-tag">SVG</span> <span class="jser-tag">Image</span> <span class="jser-tag">library</span></p> |
| 230 | + |
| 231 | +SVG의 `<foreignObject>`를 사용해 DOM 요소를 렌더링 하는 라이브러리. |
| 232 | +Shadow DOM, 의사 요소, 배경 렌더링, 폰트 포함이나 data 속성 제외에 대응 |
| 233 | + |
| 234 | +- [bubkoo/html-to-image: ✂️ Generates an image from a DOM node using HTML5 canvas and SVG.](https://github.com/bubkoo/html-to-image "bubkoo/html-to-image: ✂️ Generates an image from a DOM node using HTML5 canvas and SVG.") |
| 235 | + |
| 236 | +---- |
| 237 | + |
| 238 | +## pulsar-edit/pulsar: A Community-led Hyper-Hackable Text Editor |
| 239 | +[github.com/pulsar-edit/pulsar](https://github.com/pulsar-edit/pulsar "pulsar-edit/pulsar: A Community-led Hyper-Hackable Text Editor") |
| 240 | +<p class="jser-tags jser-tag-icon"><span class="jser-tag">atom</span> <span class="jser-tag">editor</span> <span class="jser-tag">JavaScript</span></p> |
| 241 | + |
| 242 | +Atom Editor를 Fork한 에디터. |
| 243 | +Atom를 위해 만들어진 패키지도 동작하도록 함 |
| 244 | + |
| 245 | + |
| 246 | +---- |
0 commit comments