Deno「パッケージはデザインミスとか言ってたけど、やっぱりパッケージマネージャ始めるわ」
Deno チームは 2018年のプロジェクト発表当初は package.json
や node_modules
によるパッケージマネジメント機能を、Node.js におけるデザインミスと考えていました。パッケージ概念の代わりにブラウザの URL import 機能をモデルとした、URL のツリー構造だけで依存を管理するエコシステム (deno.land/x
) を数年に渡り構築してきました。
しかし、その後、Deno チームは deno.land/x
はデザインミスと考えるようになり、代わりに JSR という新しいレジストリと jsr:
という新しい URL スキームを Deno に実装し、公式にパッケージ概念を扱うようになりました。
(URL import/deno.land/x
の何が間違いだったかの詳細は以下のブログ記事で解説されています)
https://deno.com/blog/http-imports
パッケージを扱うようになった結果、パッケージ管理関連のサブコマンドも複数実装されています。以下では、現在 deno コマンドに実装されているパッケージ管理関連のコマンドをまとめます。
deno install <pkg名...>
npm install <pkg名...>
とほぼ同じ挙動のコマンドです。コマンドを実行すると deno.json
の中の "imports" フィールドに指定されたパッケージを追加します。
Deno は JSR パッケージと npm パッケージを区別して扱うため、JSR パッケージの場合は jsr:
npm パッケージの場合は npm:
をパッケージ名の前につける必要があります。
deno add jsr:@std/path npm:chalk
上の例では JSR から @std/path
を npm から chalk
をインストールします
エイリアス: deno i
deno add
コマンドでも実行可能です
deno install
(引数なし)
deno.json
or package.json
に記載されている依存をダウンロード & ローカルにキャッシュします。deno.json
に記載されているパッケージは Deno のグローバルなキャッシュに保存されます。package.json
に記載されているパッケージは、node_modules 以下に保存されます (pnpm と同様にグローバルキャッシュへの symlink として、node_modules
以下が構築されます)。
deno uninstall <pkg名...>
<pkg名...>
で指定したパッケージを削除します。
エイリアス: deno remove
でも実行可能です。
deno publish
deno.json
もしくは jsr.json
の内容に従って、プロジェクト内のファイルを JSR に publish します。
参考記事:
deno outdated
deno.json
と package.json
に記載の依存の最新版の表示・更新ができます。
引数なしで実行すると依存とその最新バージョンを列挙します。JSR パッケージと npm パッケージ両方が対象になります。
$ deno outdated
┌──────────────────┬─────────┬─────────┬────────┐
│ Package │ Current │ Update │ Latest │
├──────────────────┼─────────┼─────────┼────────┤
│ jsr:@david/dax │ 0.40.1 │ 0.40.1 │ 0.42.0 │
├──────────────────┼─────────┼─────────┼────────┤
│ npm:@types/mocha │ 10.0.9 │ 10.0.10 │ 10.0.0 │
├──────────────────┼─────────┼─────────┼────────┤
│ npm:tailwindcss │ 3.4.15 │ 3.4.16 │ 3.4.16 │
├──────────────────┼─────────┼─────────┼────────┤
│ jsr:@std/assert │ 0.224.0 │ 0.224.0 │ 1.0.9 │
└──────────────────┴─────────┴─────────┴────────┘
--update
引数をつけると、semver range に従う範囲の最新版に自動的にアップデートします。
$ deno outdated --update
Updated 2 dependencies:
- npm:@types/mocha 10.0.9 -> 10.0.10
- npm:tailwindcss 3.4.15 -> 3.4.16