JSRを試してみる
jsr.json
とdeno.json
の共存はまだできないっぽい。
jsr.json
にpackageのオプションを書いてpublishしようとすると、deno.json
にnameフィールドがないと怒られてしまう。
これはバグ(issueはもうある)とのこと。そのうち治りそう
deno publish --config jsr.json
という回避策があるみたいです
Runtime compat
何をもってBrowser対応と言えるのか?ざっと話を聞いた感じは:
- 基本的にJSRにアップロードしたからといって、ブラウザから直接importすることはできない(内部でnpm: または jsr: からimportしている場合自動的に解決されないので)
- バンドラから使う場合は、jsrの依存等も解決されるため、バンドラを使う前提でこのブラウザ対応をOKにしてよい
- ブラウザ対応しているかは基本的には
Deno API
またはNode.js API
を利用しているかで考えてよい- ただし機械的にブラウザに対応しているかを判定する方法はない。バンドラがポリフィルして動いてしまうケースもあるし、
if(Deno !== undefined)
で判定してマルチプラットフォームで動かすライブラリもある - 根本的には、この対応欄は「作者がサポートする意思があるか」を選択するところ
- ただし機械的にブラウザに対応しているかを判定する方法はない。バンドラがポリフィルして動いてしまうケースもあるし、
とりあえず一つpublishしてみた
DescriptionとRuntime compatはdeno.jsonではなくWeb UIから設定するとのことだった。npmだとこういうのはpackage.jsonから設定するのが普通なのでそう類推したのだけど、確かにドキュメントとにらめっこするの二度手間だよなあ。
そうであればsettingsへのリンクがほしいなと思ったのでPR出した。
JSRをローカルで動かすのはpostgresの設定などが必要で多少ステップは多いけど、普通にREADME通りでできる。Dockerならもう少し楽かも。フロントエンドだけの開発なら deno task prod:frontend
で接続できるんだけど、これdeno従業員以外もできるのかな?
ブラウザは http://localhost:8000/
ではなく http://jsr.test/
で開く必要がある点には注意。
http://localhost:8000/ での開発も普通にできるようです。
また、Deno社以外でも使えます。deno task prod:frontend
で公式のAPIサーバーのURLを環境変数で渡していることが理由だと思われます。
ありがとうございます!なるほどです!
JSRをローカルで動かせるなら、社内限定のinternalなJSRを立てる需要もありそうだなと思った。でも今のところ社内のJSRを先に解決して、パッケージがなければGlobalのJSRに取りに行くみたいな仕組みはないと思う、と聞いた。プロクシサーバみたいなのを書けばできるかもしれないけど少しトリッキーかも、とのこと。
ドキュメントには言及あるなあ。そういう使い方は想定されていそう。自分のやりたいことと同じかわからないけど、NPM private registoryのUpstreamとして指定することができるみたい。
CIからのpublishも試してみる。
基本的にpublishタブの説明に沿ってGitHub Actionsを設定するだけ。簡単。
jsrパッケージとGitHubレポジトリのリンクは下記のように手動で行う必要があった。
この辺を省略するために、GitHubレポジトリからjsrパッケージを作るフローがあってもいいのかもしれない。
ちなみにesm.shもJSRに対応している。
バンドルを省略したければ、esm.shから呼べばよさそう。