denopsで書いたプラグインをjsrに対応させる
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