一時期「DenoではNode.js向けのライブラリが使えないのでは…」みたいな噂があったりしたのですが、最近ではNode.js組み込みライブラリのPolyfillも進行しており、Denoで使えるNode.jsライブラリが増えています。
また、最近ではDenoにNode.js互換モードの--compatフラグが追加されたり、Deno向けに書かれたライブラリをNode.js向けに変換するdntというツールや、Deno標準ライブラリのPolyfillをNode.js向けに提供するdeno.nsが公開されました。
今後は、
- deno標準ライブラリ内でNode.js組み込みライブラリのPolyfill
- deno.nsやdnt内でDeno標準ライブラリのPolyfill(Node.js向け)
- Node.jsにURL importが導入(https://github.com/nodejs/node/pull/36328)
- Denoに--compatフラグ下でのrequire&node_modulesサポートが導入
という流れで、Node.jsからDenoへの移行がやりやすくなるでしょう。
このように、将来的にはNode.jsとDenoの互換性が向上すると思いますが、現在でも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ライブラリを利用することができます。
詳しくはマニュアルを参照してください。
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)
ここでは自分が使ったことがあるライブラリに限って紹介しました。
理論上は、使用しているNode組み込みライブラリがポリフィルされていて、FFIを利用したdll呼び出しをしていなければ、どんなライブラリでも動作するはずです。
しかし、実際は
- window.locationを使用している
- if (typeof window)みたいなコードで環境がNode.jsかブラウザかを判別している
- XMLHttpRequestに依存している
といった場合にエラーが出る可能性があります。
そういう時はwindow.loationを設定したり、https://deno.land/x/xhr を使用してXMLHttpRequestをポリフィルしたりすると動くようになります。
こちらも、動作するライブラリを見つけたらぜひコメント欄で紹介して頂けると嬉しいです。
↧