jsr
#Deno #TypeScript #npm #sigstore #SLSA
JSRとは?
主にDeno向けに開発されたパッケージレジストリです
JSRはnpmレジストリと互換性があり、Deno以外にもNode.jsやBunなどの様々なランタイムからパッケージを利用できるのも特徴です
Deno本体にはjsrパッケージ向けのパッケージマネージャーが本体に組み込まれており、jsr:形式のURLを記述するとJSRからパッケージがダウンロードされます (Deno v2)
レジストリ(jsr.io)のソースコードはで公開されています
DenoにおけるJSRとの連携について
jsr: URL
DenoからJSRのパッケージをimportする際はjsr:形式のURLを指定します
例えば、以下のコードではdeno_stdのulidパッケージのv0.219.1を読み込んでいます (deno_stdはJSRの@stdスコープで公開されています)
code:typescript
import { ulid } from "jsr:@std/ulid@0.219.1";
JSRに公開されているパッケージについてはjsr.ioから探すことができます
deno publishコマンド
DenoからJSRにパッケージを公開するためのコマンドです
ドライラン(--dry-run)もサポートされています
deno addコマンド
JSRに公開されているパッケージをdeno.jsonのimports(Import maps)に追加してくれるコマンドです (npm installやyarn addなどに近いイメージです)
これにより、jsr:なしで該当のjsrパッケージを読み込めるようになります
例えば、以下はdeno addコマンドによりdaxパッケージを追加する例です
code:shell
# @david/daxパッケージをdeno.jsonのimportsに書き込む
$ deno add @david/dax
code:typescript
// jsr:なしで読み込むことができます
import $ from "@david/dax";
deno removeコマンド
指定されたパッケージをdeno.jsonから削除し、deno.lockを更新してくれます
code:shell
$ deno remove @david/dax
deno lintコマンド
jsrパッケージ向けにno-slow-typesなどのルールが用意されています (deno.jsonにname/version/exportsがあれば、自動で有効化されます)
deno.json
Denoの設定ファイルです
jsrに公開するパッケージのメタデータを定義できます (name/version/exports)
deno publishの実行時のみdeno.json/deno.jsoncに加えて、jsr.json/jsr.jsoncも探索されます
ワークスペース (Deno workspaces)
deno.jsonでワークスペースを定義することができます
deno_stdやfresh (Fresh v2以降)などで活用されています
fast check
jsrパッケージに関する型チェックを高速化するために導入されたDeno独自の仕組み (DenoにおけるTypeScriptの独自拡張について)
deno publishを実行する際などに実行されます
ブラウザーからJSRパッケージを使う
esm.shで実験的にサポートされているようです
code:javascript
import { toCamelCase } from "https://esm.sh/jsr/@std/text@0.218.2";
console.info(toCamelCase("DENO_DIR")); // => "denoDir"
esm.sh以外にも、後述のjsr-npmと各種バンドラーを併用して使用することも可能だと思います
追記) v136で正式にサポートが入ったようです
Node.js/BunからJSRパッケージを使う
jsr-npmを使うことで、Node.jsやBunからJSRで公開されたパッケージを利用できます
パッケージマネージャー
pnpm - v10.9.0でサポートが導入されています
Yarn - v4.9.0でサポートが導入されています
vlt -
関連ツール・ライブラリ
x-to-jsr - deno.land/xパッケージをjsr形式に変換してくれるツール
jsr-npm - Node.jsやBunからjsrパッケージを利用するためのツール
jsr-publish-on-tag - Gitタグの作成時にGitHub Actionsからjsrへパッケージを公開するためのツール
@deno/bump-workspaces
@deno/vite-plugin
Molt - Denoの依存パッケージ管理用ツール (jsrがサポートされています)
パッケージ
※主要なものやクロスランタイムサポート(Node.js/Deno/Bun/Cloudflare Workersなど)が意識されているパッケージについて紹介します
/icons/hr.icon
@std - Denoの標準ライブラリです (deno_std)
@fresh - Deno公式のPreactベースのメタフレームワークです (Fresh)
@cross - Deno/Node.js/Bun向けの様々なライブラリが公開されています
@oak/oak - Deno/Node.js/Bun/Cloudflare WorkersなどをサポートするWebフレームワークです (Oak)
@hono/hono - Deno/Node.js/Bun/Cloudflare WorkersなどをサポートするWebフレームワークです (Hono)
@david/dax - DenoやNode.jsで動作するzxライクなライブラリです (dax)
@stdext - 非公式のdeno_stdへの拡張です
@es-toolkit/es-toolkit
@rambda/rambda - Typescript focused FP library similar to Remeda and Rambda
@eslint - fix: npm and JSR package contents (eslint/rewrite#16)
リンク
Introducing JSR - the JavaScript Registry
How we built JSR - jsrの内部実装などについて
JSR Is Not Another Package Manager
The Deno Standard Library is now available on JSR - Denoのワークスペース機能についてなど
What we got wrong about HTTP imports - HTTPインポートが実装された背景とそのトレードオフ、JSRが開発された背景、Deno v2についてなど
Add JSR packages with pnpm and Yarn
日本語の情報
Deno ユーザーは https import と jsr import のどちらを使うべきか?
JSのデザインパターンライブラリを試作した話と、それをJSRにアップロードしたら無茶苦茶簡単で感動した話
関連ページ
Deno
JSRとdeno docで認識されるJSDocタグについて
Denoのnpmパッケージサポート
歴史
v1.37でjsrパッケージの解決に関する初期実装がDeno本体に追加
v1.38.3でdeno publishコマンドが実装
v1.39でワークスペースの実験的な実装が追加 (deno-weekly/articles/2023/11/19)
v1.39.3でfast checkが導入
v1.40でdeno.lockにもサポートが導入
ウェイトリストが公開 ()
v1.40.5でdeno lspでもサポートの実装が開始
v1.41でdeno lintにno-slow-typesルールが追加, deno publishの実行時に型チェックが実行されるように
jsr-ioというGitHub Organizatoinが公開
jsr-npmとx-to-jsrが公開 (2024/02/28)
v1.41.1でdeno addコマンドが実装 (2024/03/01)
レジストリのソースコードが公開 (2024/03/01)
jsrがパブリックベータ版として正式公開 (2024/03/01)
v1.43.0 - ワークスペースの各メンバーがImport mapsに自動で登録されるように (2024/05/02)
Deno v1.46 - JSRパッケージへのパッチ機能が実験的にサポート (2024/08/22)
Freshにおいても使われているようです (tests/fixture_precompile/invalid/deno.json)
v2.2.1でjsxファイルを含むパッケージの公開がサポート
各種モジュールなどにおける対応状況
deno_std
で公開されています
v0.214.0あたりから本格的に対応が進んでいた模様 (0.213.0...0.214.0)
deno-postgres
v0.18.0で対応が入っている模様 (jsrとdeno.land/x両方にpublishされてるっぽい)
oak
v13.0.0時点(JSR公開の2ヶ月前)でdeno.jsonにname/version/exportsが書かれており、かなり早い段階からサポートが進められていたようです
Hono
v4.4.0でJSRパッケージが公開されたようです
esm.sh
v135_1でサポートが導入されたようです (v135...v135_1)
v136で正式にサポートが導入されています
Deno SQLite3
v0.11.0で対応が入っています (fa99ea8)
esbuild_deno_loader
v0.9.0でjsr:URLのサポートが入っている (#110)
dnt
v0.41.0にて対応
fresh
fresh v2で公開予定
vlt
Support jsr: registry/protocol (vltpkg/vltpkg#98)