|
| 1 | +--- |
| 2 | +title: "2024-12-28: pnpm 10.0 RC.1, State of JavaScript 2024, Design Token-Based UI Architecture" |
| 3 | +author: "azu" |
| 4 | +translator: rewrite0w0 |
| 5 | +layout: post |
| 6 | +date: 2024-12-28T07:53:27.289Z |
| 7 | +category: JSer |
| 8 | +tags: |
| 9 | +- React |
| 10 | +- Remix |
| 11 | +- Design |
| 12 | +- UI |
| 13 | +- architecture |
| 14 | + |
| 15 | +--- |
| 16 | + |
| 17 | +JSer.info #720 - pnpm 10.0 RC 1가 출시되었습니다. |
| 18 | + |
| 19 | +- [Release pnpm 10.0 RC 1 · pnpm/pnpm](https://github.com/pnpm/pnpm/releases/tag/v10.0.0-rc.1) |
| 20 | + |
| 21 | +설치된 패키지의 lifecycle script 기본적으로 실행하지 않는 변경이 포함되었습니다. |
| 22 | +패키지 `postinstall`의 lifecycle script 실행을 허용하기 위해서는 `pnpm.onlyBuiltDependencies` 설정에 패키지 명을 추가할 필요가 있습니다. |
| 23 | + |
| 24 | +- [feat!: use an allow list of built dependencies by default by zkochan · Pull Request #8897 · pnpm/pnpm](https://github.com/pnpm/pnpm/pull/8897) |
| 25 | + |
| 26 | +이는, rspack v1.1.7에서 패키지가 하이재킹되어 [멀웨어 실행하는 lifecycle script](https://socket.dev/npm/package/@rspack/core/files/1.1.7/package.json#L78) 문제에 관련한 변화입니다. |
| 27 | + |
| 28 | +- [Release v1.1.8 · web-infra-dev/rspack](https://github.com/web-infra-dev/rspack/releases/tag/v1.1.8) |
| 29 | + |
| 30 | +그 외로는, `pnpm link` 동작 변경, `packageManager` 참조해 pnpm 버전을 확인하도록, 해쉬 알고리즘을 SHA256으로 변경, store 버전 업데이트도 있습니다. |
| 31 | +또한, `verifyDepsBeforeRun` 옵션이 추가되어, lock와 `node_modules/` 상태를 비교해서 자동 설치 동작을 선택할 수 있는 변화도 있습니다. |
| 32 | + |
| 33 | +---- |
| 34 | + |
| 35 | +JavaScript 관련한 개발자 앙케이트 [State of JavaScript 2024](https://2024.stateofjs.com/en-US)가 공개되었습니다. |
| 36 | +JavaScript 언어 기능 / 라이브러리 / 테스트 / monorepo / JS와 TS 비율 / AI 이용률, 학습 자원에 대한 앙케이트 결과가 정리되어 있습니다. |
| 37 | + |
| 38 | +---- |
| 39 | + |
| 40 | +[Design Token-Based UI Architecture](https://martinfowler.com/articles/design-token-based-ui-architecture.html)에는 Design Token 기반의 UI 아키텍처에 대해 작성되어 있습니다. |
| 41 | + |
| 42 | +Design Token를 2개 or 3개 레이어로 분할하는 이유, Token 스코프, Design Token 장/단점에 대해 다루고 있습니다. |
| 43 | + |
| 44 | +---- |
| 45 | + |
| 46 | +{% include inline-support.html %} |
| 47 | + |
| 48 | +---- |
| 49 | + |
| 50 | +<h1 class="site-genre">헤드라인</h1> |
| 51 | + |
| 52 | +---- |
| 53 | + |
| 54 | +## react-router/CHANGELOG.md at main · remix-run/react-router |
| 55 | +[github.com/remix-run/react-router/blob/main/CHANGELOG.md#v710](https://github.com/remix-run/react-router/blob/main/CHANGELOG.md#v710 "react-router/CHANGELOG.md at main · remix-run/react-router") |
| 56 | +<p class="jser-tags jser-tag-icon"><span class="jser-tag">React</span> <span class="jser-tag">Remix</span> <span class="jser-tag">library</span> <span class="jser-tag">ReleaseNote</span></p> |
| 57 | + |
| 58 | +React Router 7.1.0 출시. |
| 59 | +Vite 6 지원 |
| 60 | + |
| 61 | + |
| 62 | +---- |
| 63 | + |
| 64 | +## Release v2.3.0 · vercel/swr |
| 65 | +[github.com/vercel/swr/releases/tag/v2.3.0](https://github.com/vercel/swr/releases/tag/v2.3.0 "Release v2.3.0 · vercel/swr") |
| 66 | +<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> |
| 67 | + |
| 68 | +SWR v2.3.0 출시. |
| 69 | +fallback으로 Promise 데이터 지정 가능, React 19 지원 |
| 70 | + |
| 71 | + |
| 72 | +---- |
| 73 | + |
| 74 | +## Release 8.3.0 – Pipes of Steel · google/zx |
| 75 | +[github.com/google/zx/releases/tag/8.3.0](https://github.com/google/zx/releases/tag/8.3.0 "Release 8.3.0 – Pipes of Steel · google/zx") |
| 76 | +<p class="jser-tags jser-tag-icon"><span class="jser-tag">nodejs</span> <span class="jser-tag">ShellScript</span> <span class="jser-tag">library</span> <span class="jser-tag">ReleaseNote</span></p> |
| 77 | + |
| 78 | +zx 8.3.0 출시. |
| 79 | +Async Iterator 대응, `pipe()` 개선, `--env` 플래그 추가 |
| 80 | + |
| 81 | + |
| 82 | +---- |
| 83 | + |
| 84 | +## Nuxt 3.15 · Nuxt Blog |
| 85 | +[nuxt.com/blog/v3-15](https://nuxt.com/blog/v3-15 "Nuxt 3.15 · Nuxt Blog") |
| 86 | +<p class="jser-tags jser-tag-icon"><span class="jser-tag">Nuxt</span> <span class="jser-tag">ReleaseNote</span></p> |
| 87 | + |
| 88 | +Nuxt v3.15 출시. |
| 89 | +Vite 6 지원, `callOnce()` 추가, `definePageMeta` 개선 |
| 90 | + |
| 91 | + |
| 92 | +---- |
| 93 | + |
| 94 | +## Release pnpm 10.0 RC 1 · pnpm/pnpm |
| 95 | +[github.com/pnpm/pnpm/releases/tag/v10.0.0-rc.1](https://github.com/pnpm/pnpm/releases/tag/v10.0.0-rc.1 "Release pnpm 10.0 RC 1 · pnpm/pnpm") |
| 96 | +<p class="jser-tags jser-tag-icon"><span class="jser-tag">pnpm</span> <span class="jser-tag">ReleaseNote</span></p> |
| 97 | + |
| 98 | +pnpm v10.0.0-rc.1 출시. |
| 99 | +설치하는 패키지 lifecycle script를 기본적으로 실행하지 않도록 변경. |
| 100 | + `pnpm link` 동작 변경, `packageManager` 참초해서 pnpm 버전을 확인하도록, 해시 알고리즘을 SHA256으로 변경, store 버전 업데이트. |
| 101 | + `verifyDepsBeforeRun` 옵션이 추가되어, lock와 `node_modules/` 상태를 비교해 자동 설치 동작을 선택 가능. |
| 102 | + |
| 103 | + |
| 104 | +---- |
| 105 | + |
| 106 | +## Release v1.1.8 · web-infra-dev/rspack |
| 107 | +[github.com/web-infra-dev/rspack/releases/tag/v1.1.8](https://github.com/web-infra-dev/rspack/releases/tag/v1.1.8 "Release v1.1.8 · web-infra-dev/rspack") |
| 108 | +<p class="jser-tags jser-tag-icon"><span class="jser-tag">rspack</span> <span class="jser-tag">security</span> <span class="jser-tag">ReleaseNote</span></p> |
| 109 | + |
| 110 | +rspack v1.1.8 출시. |
| 111 | +`@rspack/core`와 `@rspack/cli` v1.1.7 패키지가 하이재킹되어 멀웨어 포함한 버전을 배포한 문제를 대응하는 출시. |
| 112 | + |
| 113 | + |
| 114 | +---- |
| 115 | +<h1 class="site-genre">읽을거리</h1> |
| 116 | + |
| 117 | +---- |
| 118 | + |
| 119 | +## Design Token-Based UI Architecture |
| 120 | +[martinfowler.com/articles/design-token-based-ui-architecture.html](https://martinfowler.com/articles/design-token-based-ui-architecture.html "Design Token-Based UI Architecture") |
| 121 | +<p class="jser-tags jser-tag-icon"><span class="jser-tag">Design</span> <span class="jser-tag">UI</span> <span class="jser-tag">architecture</span> <span class="jser-tag">article</span></p> |
| 122 | + |
| 123 | +Design Token과 UI 개발에 대하여. |
| 124 | +Design Token을 2개 or 3개 레이어에 분할하는 이유, Token 스코프, Design Token 장/단점에 대하여 |
| 125 | + |
| 126 | + |
| 127 | +---- |
| 128 | + |
| 129 | +## State of JavaScript 2024 |
| 130 | +[2024.stateofjs.com/en-US](https://2024.stateofjs.com/en-US "State of JavaScript 2024") |
| 131 | +<p class="jser-tags jser-tag-icon"><span class="jser-tag">JavaScript</span> <span class="jser-tag">Survey</span></p> |
| 132 | + |
| 133 | +State of JavaScript 2024 앙케이트 결과 공개. |
| 134 | +JavaScript 언어 기능 / 라이브러리 / 테스트 / monorepo 관련하여. |
| 135 | +또한 JS와 TS의 비율, AI 이용률, 학습 자원에 대해서도 다룸 |
| 136 | + |
| 137 | + |
| 138 | +---- |
| 139 | + |
| 140 | +## Service Worker가 페이지를 컨트롤하는 타이밍을 skipWaiting 와 clients.claim 으로 이해한다 - 카미나시 엔지니어 블로그 |
| 141 | +[kaminashi-developer.hatenablog.jp/entry/2024/12/20/080000](https://kaminashi-developer.hatenablog.jp/entry/2024/12/20/080000 "Service Worker가 페이지를 컨트롤하는 타이밍을 skipWaiting 와 clients.claim 으로 이해한다 - 카미나시 엔지니어 블로그") |
| 142 | +<p class="jser-tags jser-tag-icon"><span class="jser-tag">ServiceWorker</span> <span class="jser-tag">article</span></p> |
| 143 | + |
| 144 | +Service Worker의 `skipWaiting`와 `clients.claim` 동작에 대하여. |
| 145 | + |
| 146 | + |
| 147 | +---- |
| 148 | + |
| 149 | +## React Aria 구현 읽을거야 - Qiita Advent Calendar 2024 - Qiita |
| 150 | +[qiita.com/advent-calendar/2024/react-aria](https://qiita.com/advent-calendar/2024/react-aria "React Aria 구현 읽을거야 - Qiita Advent Calendar 2024 - Qiita") |
| 151 | +<p class="jser-tags jser-tag-icon"><span class="jser-tag">React</span> <span class="jser-tag">accessibility</span> <span class="jser-tag">article</span></p> |
| 152 | + |
| 153 | +React Aria 접근성 대응 구현에 대한 연재 글 |
| 154 | + |
| 155 | + |
| 156 | +---- |
| 157 | + |
| 158 | +## Why I’m excited about text-box-trim as a designer - Piccalilli |
| 159 | +[piccalil.li/blog/why-im-excited-about-text-box-trim-as-a-designer/](https://piccalil.li/blog/why-im-excited-about-text-box-trim-as-a-designer/ "Why I’m excited about text-box-trim as a designer - Piccalilli") |
| 160 | +<p class="jser-tags jser-tag-icon"><span class="jser-tag">css </span> <span class="jser-tag">article</span> <span class="jser-tag">fonts</span></p> |
| 161 | + |
| 162 | +CSS의 text-box-trim/text-edge/text-box에서의 타이포그래피에 대하여 |
| 163 | + |
| 164 | + |
| 165 | +---- |
| 166 | +<h1 class="site-genre">소프트웨어, 도구, 라이브러리</h1> |
| 167 | + |
| 168 | +---- |
| 169 | + |
| 170 | +## Zero Docs |
| 171 | +[zero.rocicorp.dev/](https://zero.rocicorp.dev/ "Zero Docs") |
| 172 | +<p class="jser-tags jser-tag-icon"><span class="jser-tag">JavaScript</span> <span class="jser-tag">React</span> <span class="jser-tag">WebSocket</span> <span class="jser-tag">library</span> <span class="jser-tag">database</span></p> |
| 173 | + |
| 174 | +클라이언트와 백엔드 데이터베이스 상태를 동기화하는 쿼리 엔진. |
| 175 | +클라이언트에서 ORM으로 쿼리를 작성, 그 결과가 백엔드 데이터베이스에 반영. 또한 쿼리 결과는 클라이언트 모컬에서도 캐시해 재이용 가능하도록해서, 클라이언트에는 고속으로 반영됨. |
| 176 | +권한은 Zero Schema에 스키마 정의함으로 클라이언트에서 실행가능한 쿼리를 제어한다. |
| 177 | + |
| 178 | + |
| 179 | +---- |
0 commit comments