第41回 - Deno with npm package

11/18 に第41回ZEALOT勉強会を実施しました。

今回のテーマは、Deno紹介シリーズ第3弾として、最近 Deno が npm パッケージをサポートするようになったのでその紹介でした。


Node の package.json における反省点

Node の開発者のライアン・ダール(Deno も作った)による Node.jsに関する10の反省点 の動画では、package.json についての反省点が説明されています。

 
10things I Regret About Node.js
 

Deno で npm パッケージを利用できるようになりましたが、この反省点からの改善がされているようです。

Node の package.json における反省点

  • require() で module を読み込むときに、local にあるのか global にあるものなのか、npm database にあるものなのか分からない。
  • package.json 内にいらない情報が多い。
    • License, Repository, Description など
  • importするときに、web側と互換性がない。 File と Version を含む URLs だけでよかった。
  • node_modules の module 解決アルゴリズムが複雑になりすぎたし、ブラウザ互換性がない。
  • require で読み込むときに .js のような拡張子が記述されないため不明確になった(ローダー側への負担)。そしてブラウザ互換性がない。

Deno の npm package をサポートするまでの流れ

  • Node.jp での反省を踏まえ開発された Deno は素晴らしいものとなりました。いろんな呪縛から解き放たれた!
  • しかし多くのライブラリが Node.js で作られ、npm registry から提供されている。npmライプラリが使えないのが、Denoを選択しない理由になってしまっていた。
  • Deno の最近のバージョン(1.28.1)から npm パッケージをサポートするようになった。

Deno で推奨される npm Specifiers を使うやり方

 
npm specifiers
 
  • npm install が不要。
  • node_module も存在しない。
  • package.json を作成する必要がない。コードに追加すれば良いだけ。
    • ローカルにライブラリのキャッシュがないか確認してからDLする。2回目以降はキャッシュを利用する。
    • @version を指定しない場合は、最新バージョンが適用される。
  • サードパーティのライブラリを利用する場合で、ネットワークやファイルなどへアクセスするときにpermission の確認が必須になる。

Deno で npm パッケージを利用する他の方法

  • import maps を使う。
  • CDNs を利用する。
    • Node のパッケージを Deno で使えるように変換してくれる。
  • npm.js に入っているものは基本的には全て使えるようになったが、それ以外全てのサポートはされてない。

まとめ

  • npm パッケージを Deno で利用できるようになることで、Deno が利用されやすくなると考える。
  • Denoはまだ最近のものであるし、Node と比べると開発者やナレッジも少ないので、現場レベルへお薦めはできない。

References