一時期「DenoではNode.js向けのライブラリが使えないのでは…」みたいな噂があったりしたのですが、最近ではNode.js組み込みライブラリのPolyfillも進行しており、Denoで使えるNode.jsライブラリが増えています。
というわけで、この記事では「Denoで使えるNode.jsライブラリ」を紹介していきたいと思います。
ポート(移植)されたもの
人気ライブラリはNode.jsからDenoへポート(移植)されています。
lodash
lodashは配列操作等のユーティリティ系ライブラリです。
koa
koaはexpressライクなルーティングライブラリです。
React・Next.js
Reactはフロントエンドフレームワークです。
Aleph.jsという名前で移植されました。
NanoJSX
軽量なJSXライブラリです。
jsdom
HTMLをパースし、DOM操作するライブラリです。
puppeteer
ブラウザを自動操作するためのライブラリです。
dotenv
.env
ファイルから環境変数を読み取り設定するライブラリです。
twind
CSSフレームワークです。
axios
PromiseベースのHTTPクライアントです。
Go標準ライブラリ
Node.jsのライブラリではありませんが、Go標準ライブラリの一部はDeno標準ライブラリに移植されています。
ここで紹介したのはほんの一例です。
Node.jsから移植されたライブラリは他にもたくさんあると思うので、見つけたらぜひコメント欄で紹介してください。
CDN経由で利用できるもの
https://esm.sh/, https://www.skypack.dev/, https://unpkg.com/, https://jspm.org/ といったCDNからURLインポートすることで、Node.jsライブラリを利用することができます。
一部のライブラリを除けば、そのままimportするだけで動作します。
詳しくはマニュアルを参照してください。
Firebase
詳しくは「deno deploy - Firebaseを使用してデータを永続化する」を参照してください。
import firebase from "https://cdn.skypack.dev/firebase@8.7.0/app";
import "https://cdn.skypack.dev/firebase@8.7.0/auth";
import "https://cdn.skypack.dev/firebase@8.7.0/firestore";
marked
markedはマークダウン形式のテキストをHTMLに変換するライブラリです。
import marked from "https://esm.sh/marked@3.0.4";
console.log(marked("markdown text"));
spotify-web-api-ts
spotify-web-api-tsはspotify APIを呼び出すライブラリです。
import { SpotifyWebApi } from "https://esm.sh/spotify-web-api-ts";
const spotify = new SpotifyWebApi({
accessToken: "<アクセストークン>",
});
const res = await spotify.player.getRecentlyPlayedTracks({ limit: 50 });
console.log(res)
ここでは自分が使ったことがあるライブラリに限って紹介しましたが、普通のライブラリなら普通に動作するはずです。
一部のライブラリはDenoで動作しないこともあります。主に以下の4つのパターンに分類できます。
-
ポリフィルが完了していないNode組み込みライブラリを使っている
ポリフィルの進行状況はhttps://deno.land/std@0.113.0/node で見ることができます。ポリフィルが終わっていないNode組み込みライブラリに依存している場合は、動作しません。
-
FFIを利用している
Node.jsのFFIとDenoのFFIは動作方法が異なるため、動作しない(はず)です。
-
XMLHttpRequest
等の、Denoに存在しないグローバルオブジェクトを参照している自分でポリフィルを差し込むことで動作させることができます。(https://deno.land/x/xhr など)
-
if (typeof window)
等でブラウザ向けの処理とサーバー向けの処理を分岐している
サーバー向けの処理を実行してほしいにもかかわらず、ブラウザ向けの処理が実行されてしまうことがあります。こういう場合、できることはあまりありません。
まとめ
昔はポリフィルも少なかったので「Denoでnpmのライブラリを使うのは難しい」とされていましたが、この1年半でCDNの対応も進み、充分使えるようになってきました。
結構お手軽にNode.js向けのライブラリが使えるので(node_modules
不要!)、試してみてはいかがでしょうか。