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