🐜

denopsで書いたプラグインをjsrに対応させる

2024/07/15に公開

TL;DR:

以下を実行する。

$ deno run -A jsr:@deno/x-to-jsr
$ deno run -A jsr:@omochice/importmap-expand --option deno.json ./**/*.ts

必要に応じて、以下も実行する。

$ git restore deno.json
$ deno fmt ./**/*.ts
$ deno check ./**/*.ts
$ deno test

背景

deno.land/x は今後レジストリとしては開発されなくなる

という状態になっていて、denops/std も7.0.0からjsr.ioでの公開になるようです。

プラグインが動かなくなることは、(おそらく)ないはずですが、追従が面倒になるのでできれば合わせておきたいところ。

何をすればいいのか

"https://deno.landから読み込んでいたライブラリをjsr:からの読み込みに変える" ことが必要です。

ただ、使っているライブラリのどれがjsr:での読み込みに切り替えられるのか、いちいち調べるのは面倒だったりします。

幸いなことに、denoland/x-to-jsrという便利なツールがあるので、これを使います。

$ deno run -A jsr:@deno/x-to-jsr

これをすると使っているライブラリのうち、jsrでも公開されているものがあれば、それに置き換えた上でdeno.jsonにimport mapを作ってくれます。

(deno.jsoncが既に存在しているのならそちらへ書き込みがされます。)

denopsのブラグインは2024-07の時点では、deno.jsonのimport mapの解決はできないので、ソースコード中でのjsr:の形式に直してあげないといけません。

稚作のツールがあるのでこれを使います。

$ deno run -A jsr:@omochice/importmap-expand --option deno.json ./**/*.ts

import mapがdeno.jsonではなくdeno.jsoncに書かれている場合、--optionにはdeno.jsoncを渡す必要があります。

このツールでdeno.jsonに書かれているimport mapをソースコード中でのjsr:に置き換えられます。

Optional

ここから下は必要に応じて別の方法で置き換えられます。

deno.jsonに書かれているimport mapは不要になったので、消します。

$ git restore deno.json

https://...からjsr:へコードが変化し、折り返さないとdeno fmtが通らないかもしれません。

$ deno fmt ./**/*.ts

移行先のバージョンがjsr.ioに公開されていない場合など、コードが実行できない状態になっている可能性もあります。

deno checkで型チェック、deno testでテストをして確認したほうが安全です。

$ deno check ./**/*.ts
$ deno test

Discussion