LoginSignup
4
1

More than 1 year has passed since last update.

npmの資産を生かしてDenoで開発する

Last updated at Posted at 2021-11-06

一時期「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つのパターンに分類できます。

  1. ポリフィルが完了していないNode組み込みライブラリを使っている

    ポリフィルの進行状況はhttps://deno.land/std@0.113.0/node で見ることができます。ポリフィルが終わっていないNode組み込みライブラリに依存している場合は、動作しません。

  2. FFIを利用している

    Node.jsのFFIとDenoのFFIは動作方法が異なるため、動作しない(はず)です。

  3. XMLHttpRequest等の、Denoに存在しないグローバルオブジェクトを参照している

    自分でポリフィルを差し込むことで動作させることができます。(https://deno.land/x/xhr など)

  4. if (typeof window)等でブラウザ向けの処理とサーバー向けの処理を分岐している
    サーバー向けの処理を実行してほしいにもかかわらず、ブラウザ向けの処理が実行されてしまうことがあります。こういう場合、できることはあまりありません。

まとめ

昔はポリフィルも少なかったので「Denoでnpmのライブラリを使うのは難しい」とされていましたが、この1年半でCDNの対応も進み、充分使えるようになってきました。
結構お手軽にNode.js向けのライブラリが使えるので(node_modules不要!)、試してみてはいかがでしょうか。

4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1