Deno Land社は最近、新しいJavaScriptレジストリであるJSRをベータリリースした。このレジストリは、最新の開発ニーズにより適合し、断片化されたJavaScriptエコシステムの統一に努めている。特に、JSRはESM(JavaScriptネイティブモジュール)を含み、TypeScriptをネイティブにサポート、主要なJavaScriptランタイム(例えば、Node、Deno、Bun、ブラウザ、雑多なサーバーレス環境)に対応する。
2010年にリリースされたnpmパッケージマネージャーは、もともとNode.js、CommonJSモジュールシステム、そしてVanilla JavaScriptを中心に設計された。それから15年が経ち、JavaScriptはネイティブモジュールシステム(ESM)を持ち、TypeScriptは型付きJavaScriptの主要な選択肢となり、新しいJavaScript言語機能のテストベッドとなっている。重要なのは、JavaScriptはもはやブラウザとNode.jsに限定されないことだ。クラウド・プロバイダーは、しばしば独自の最適化されたJavaScriptランタイムを実行している。Denoや BunもNode.jsの代わりとして成長しており、主要な前提を見直し、開発者のエクスペリエンスに焦点を当てている。
新しくリリースされたJavaScriptレジストリであるJSRは、フリーなオープンソースであり、CommonJSモジュールをESMに置き換え、TypeScriptをネイティブにサポートし、npmの開発者エクスペリエンス、パフォーマンス、信頼性、セキュリティの向上を目標としている。
JSRのドキュメントには、設計目標としてクロスランタイム・パッケージについても記述されている。
JSRのゴールは、JavaScriptが動作する場所であればどこでも動作し、JavaScriptとTypeScriptコードのためにランタイムにとらわれないレジストリを提供することです。今日、JSRはDenoやその他のnpm環境で動作し、
node_modules
を入力します。これは、Node.js、Bun、Cloudflare Workers、そしてpackage.json
で依存関係を管理する他のプロジェクトもJSRと相互運用できることを意味します。
JSRは、JSRパッケージがnpmパッケージに依存可能にすることで、npmエコシステムの再利用に努めている。
JSRは、npmベースのプロジェクトやパッケージと相互運用可能に設計されています。JSRは、npmベースのプロジェクトやパッケージと相互運用可能に設計されています。JSRパッケージは、
node_modules
フォルダを使用する任意の実行環境で使用できます。JSRモジュールはnpmから依存関係をインポートできます。
JSRはまた、コード配布のベストプラクティスに向けてパッケージ作成者を後押しするために、パッケージスコアリングシステムを使用している。例えば、エクスポートされた各シンボルに包括的なJSDocドキュメント(パッケージのドキュメントを自動生成するために使用される)を含むパッケージには、ランキングスコアが与えられる。ランキングスコアには、高速な型チェックのための最適な型宣言の存在や、複数のランタイムとの互換性といった他の要素も含まれる。
開発者は、パブリッシングフローの雑多な例についてリリースノートを確認することが推奨される。例えば、パッケージ作成者がJSRとDenoを使ってTypeScriptパッケージを公開する場合、少なくとも3つのファイルを作成する必要がある。jsr.json
メタデータファイル、パッケージのTypeScriptソースファイル、そしてパッケージの概要を提供するREADME.md
ファイルである。jsr.json
ファイルは以下になる。
{ "name": "name":"@kwhinnery/yassify"、 "version": "1.0.0", "exports": "./mod.ts"}
exports
フィールドは、パッケージ利用者に公開されるパッケージ・モジュールを指定する。
このパッケージは、Deno環境ではdeno publish
で、Node.js環境ではnpx jsr publish
で公開される。
Deno標準ライブラリは最近JSRで利用可能になった。開発者は、パッケージ・ランキングのスコアを最適化するために、オンラインで提供されるパッケージ・ドキュメントのガイドラインを確認できる。Denoチームはさらに、JSRをどのように構築したかについての詳細なブログ記事も公開している。