JSer.info #553 - Next.js 11.1 がリリースされました。
オープンリダイレクタの脆弱性が修正されています。
experimental.esmExternals
オプションでNode.jsのESMをサポートしています。
その他には、node-fetch
のkeepAliveをデフォルトで有効化、Source Map/ESLint/next/image
の改善なども含まれています。
また、Rust製のJS/TS Compiler/BundlerであるSWCの作者であるDongYoon KangがVercelに入り、Next.jsでのコンパイルにSWCを利用できるように開発中とのことです。
Rails 7.0では、現在のwebpacker(webpack)ではなく、Import mapsを使ってJavaScriptライブラリを利用する方法をデフォルトする方針が提案されています。
- Modern web apps without JavaScript bundling or transpiling
- Replace webpack with importmapped Hotwire as default js by dhh · Pull Request #42999 · rails/rails
Import mapsはES Modulesでimportする際に、importするモジュールの名前解決を定義するウェブ標準です。
次のようにtype="importmap"
でImport mapsを定義します。
<script type="importmap">
{
"imports": {
"app": "./src/app.js",
"md5": "https://cdn.skypack.dev/md5"
}
}
</script>
このImport mapsの定義が、各モジュールでの名前解決に利用されます。
import app from "app"; // ./src/app.js をロードする
import md5 from "md5"; // https://cdn.skypack.dev/md5 をロードする
Import mapsはChrome系ブラウザのみがサポートしているため、他のブラウザではES Module Shimsを利用する必要があります。(rails/importmap-railsにはshimが同梱されています)
Rails 7では、JavaScriptのbuildやbundleをせずにCDNからライブラリを取得できる仕組みをImport mapsを使って実現して、現在のwebpackerをオプションへと変更する予定となっています。
TypeScriptやReactのようなビルドを前提とする仕組みはwebpackerを利用する必要があります。
詳しい動作については次の動画でデモが公開されています。
JSer.infoをサポートするには
- 😘 知り合いにJSer.infoをおすすめする
- ❤️ GitHub Sponsorsで@azuのスポンサーになる
- 🐦 X(Twitter)で@jser_infoをフォローする
JSer.info Sponsors
JSer.info SponsorsはGitHub SponsorsとしてJSer.infoを支援してくれている方々です。
ヘッドライン
August 2021 Security Releases | Node.js
nodejs.org/en/blog/vulnerability/aug-2021-security-releases/
Node.jsのセキュリティアップデート。
それぞれ対応するNode v12.22.5 (LTS)、 Node v14.17.5 (LTS)、Node v16.6.2がリリースされている。
DNSライブラリc-aresのセキュリティ修正、http2
のstreamを閉じた際のUse after freeの修正。
rejectUnauthorized
にundefined
を渡すと期限切れの証明書を受け付けていた問題の修正など
Hopping on Firefox 91 - Mozilla Hacks - the Web developer blog
hacks.mozilla.org/2021/08/hopping-on-firefox-91/
Firefox 91リリース。
Visual Viewport API、Intl.DateTimeFormatの改善、Error Causeのサポートなど。
またGamepad APIがSecure Contextでのみ動作するようになる変更など
Blog - Next.js 11.1 | Next.js
Next.js 11.1リリース。
オープンリダイレクタの脆弱性の修正、experimentalでNode.jsのESMをサポート。
node-fetch
のkeepAliveをデフォルトで有効化、Source Map/ESLint/next/image
の改善など
Announcing TypeScript 4.4 RC | TypeScript
devblogs.microsoft.com/typescript/announcing-typescript-4-4-rc/
TypeScript 4.4 RCリリース。
Control Flow Analysisの改善、Index SignaturesにSymbolやTemplate Stringを利用できるように。
Catch節のデフォルトをunknown
型にするuseUnknownInCatchVariables
オプションの追加。
optionalとundefined
値の区別をするexactOptionalPropertyTypes
オプションの追加。
また、ES Proposal Stage 3のclass static blockをサポート。
declarationの生成やstrict
モードでのビルドパフォーマンスの改善も含まれている
Release v6.0.0 · vueuse/vueuse
github.com/vueuse/vueuse/releases/tag/v6.0.0
vueuse 6.0.0リリース。
Vue 3.2のeffectScope
APIに対応、createSharedComposable
/toReactive
/useEventBus
の追加。
useStorage
にonErrorコールバックの追加など
アーティクル
JavaScript Development: Making a Web Worker optional | by Tobias Uhlig | Aug, 2021 | ITNEXT
itnext.io/javascript-development-making-a-web-worker-optional-f23a13490b28
重たいロジックを別のWeb Workerで分けることには意味があるが、スレッドがほとんどアイドル状態の場合にWorkerを分けるとpostMessage分の遅延が発生してしまう。
Workerとして分けて実行していた処理を、同じAPIを維持しつつ同じスレッドで実行するように処理を変更するアプローチについて。
neo.mjs 2.3.4ではどのように対応したかについて。
<Lazy> rendering in Vue to improve performance | by Martin Malinda | Vue.js Developers | Aug, 2021 | Medium
medium.com/js-dojo/lazy-rendering-in-vue-to-improve-performance-dcccd445d5f
Vueでの遅延レンダリングを使ったパフォーマンス改善について。
レンダリングのタイミングをずらす、Intersection Observerを使ってviewportに入るタイミングでレンダリング、無限リストの実装についてなど
Slinkity
静的サイトジェネレータである11tyにReact/Vue/Svelteなどのコンポーネントをimportとして利用できるようにする拡張
Modern web apps without JavaScript bundling or transpiling
world.hey.com/dhh/modern-web-apps-without-javascript-bundling-or-transpiling-a20f2755
Rails 7.0でwebpacker(webpack)ではなくimport mapsベースのbundlerを使わないアプローチをデフォルトにすることを検討しているという話。
- rails/importmap-rails: Use ESM with importmap to manage modern JavaScript in Rails without transpiling or bundling.
- Replace webpack with importmapped Hotwire as default js by dhh · Pull Request #42999 · rails/rails
- Alpha preview: Modern JavaScript in Rails 7 without Webpack - YouTube
Don’t attach tooltips to document.body - Atif Afzal
atfzl.com/don-t-attach-tooltips-to-document-body
document.body
直下にツールチップ表示用の要素を追加すると、多くの要素のスタイル更新処理が行われパフォーマンスの問題となった話。
どのようにレイアウト計算の影響を確認したか、ツールチップを表示用の要素をラップすることでスタイル更新の影響範囲を小さくした話
CSS Grid tooling in DevTools - Chrome Developers
developer.chrome.com/blog/css-grid-tooling/
Chrome DevToolsのCSS Gridのデバッグ機能と追加されたCDP(chrome devtools protocol)について。
DevToolsのGridのオーバーレイ表示を永続化、DOMの変更を即時反映、ComputedなStyleでの要素検索を実現するために、CDPに対して新しいコマンドを実装したという話。
ソフトウェア、ツール、ライブラリ関係
craigmichaelmartin/pure-orm: A Node.js SQL toolkit for writing native SQL queries yielding pure business objects
github.com/craigmichaelmartin/pure-orm
ORMライブラリ。
Business Object(BO)とData Access Object(DAO)を使ってDBとのデータをやり取りする。
DAOはクエリビルダーではなく、生に近いSQL構文を利用する
microlinkhq/keyv: Simple key-value storage with support for multiple backends.
redis/mongo/SQLite/MySQL/PostgreSQLなどの各種バックエンドに対応したKVSライブラリ。
jlongster/absurd-sql: sqlite3 in ur indexeddb (hopefully a better backend soon)
github.com/jlongster/absurd-sql
sql.jsのIndexedDBバックエンド