O hirunewani blog

Frontend Weekly 2024-10-11

Created at

Deno v2.0、Tauri 2.0、npmのdevEnginesフィールドのサポートなどについて

Deno v2.0

Deno v2がリリースされた。

https://deno.com/blog/v2.0

windowオブジェクトの削除

ブラウザ互換を目的としてグローバルに追加されたが混乱の元になっていたため削除された。 現在はglobalThisの利用を推奨している。

processオブジェクトのグローバルへの追加

Node.js互換を目的として、グローバルに追加された。 今までnode:processからのインポートする必要があった。

deno addのプレフィックス指定

deno addでパッケージをインストールする際に、JSRとNPMどちらのレジストリを利用するかjsr:またはnpm:のプレフィックスの指定が必須になった。省略した場合、JSRにあればjsr:が提案され、NPMにしかなければnpm:が提案される。

$ deno add @hono/hono
error: @hono/hono is missing a prefix. Did you mean `deno add jsr:@hono/hono`?

また、npm:を指定し、package.jsonが存在する場合、deno.jsonではなくpackage.jsonに依存関係が追加されるようになった。

deno removeの追加

依存関係を削除するdeno removeコマンドが追加された。 プレフィックスの指定は不要。package.jsonがある場合、package.jsonから削除される。

deno install --entrypointの追加

エントリーポイントとして指定したファイルで使われているモジュール全てをインストール出来るdeno install --entrypointが追加された。

その他

他にimport assertiondeno bundledeno vendorなど非推奨であった機能の廃止、--unstable--lock-writeなどのCLIフラグの非推奨化、既存の機能の改善や、Node.jsとの互換性強化などが行われている。

Denoの高速化については、公式の発表を見るとBunより速いように見えるが、現状個人で検証している方のデータを参照および自身で軽く試してところ、Bunより高速ということはないように思う。

Tauri 2.0

Tauri 2.0がリリースされた。

https://v2.tauri.app/blog/tauri-20/

Tauriは、Electronの代替を目指すRust製のフレームワークである。

モバイルのサポート

以前はTauri Mobileに分かれていたが統合され、デスクトップアプリケーションに加えて、iOSとAndroidに対応したモバイルアプリケーションの提供が可能になった。モバイルデバイスおよびエミュレータでのHMRもサポートしている。

ESLint now officially supports linting of JSON and Markdown

ESLintがJSONとMarkdownを公式にサポートしたことを改めて紹介している。 @eslint/json@eslint/markdownの利用方法に加えて、カスタムルールの作成についても言及している。

https://eslint.org/blog/2024/10/eslint-json-markdown-support/

公式がサポートしているルールはあまり多くないが、@eslint/jsonはjsoncとjson5に対応している。 また@eslint/markdownではCommonmarkフォーマットとGFM(GitHub-Flavored Markdown)フォーマットを区別して対応をしている。

npm v10.9.0 devEngines

npm v10.9.0でdevEnginesフィールドが追加された。

https://github.com/npm/cli/releases/tag/v10.9.0

devEnginesを利用することで、開発時のランタイムとパッケージマネージャを制御することが出来る。

https://docs.npmjs.com/cli/v10/configuring-npm/package-json#devengines

devEnginesは次のように利用する。

{
  "devEngines": {
    "runtime": {
      "name": "node",
      "onFail": "error"
    },
    "packageManager": {
      "name": "npm",
      "onFail": "error"
    }
  }
}

これは、packageManagerフィールドについての議論を元に提案された仕様を元に実装されている。