Logo
Overview

Bunでサポートされていないもの

May 17, 2024
1 min read

脱NodeJSにはまだ早い

BunはNodeJSに代わる高速なJavaScriptランタイムで、環境によっては完全にNodeJSを利用しないような状態にすることもできますが、一方でフレームワークあるいはライブラリの依存の問題からNodeJSとの関係を断ち切れないものがあります。

普段、あまり気にすることがなかったのですが開発途中であれこれ動かないじゃんと気づいたことがあったのでそれをメモします。

NestJS

一応サポートはされているっぽいのだが、NestJS+SWCで十分に高速なので完全な脱NodeJSはしなくても良い気はする。

特に、Prismaと連携するような場合にはPrismaがNodeJSが必要になってくるので切っても切れない関係になっている。

Wrangler

Cloudflare謹製のCLIツールだが機能の一部でPerformanceResourceTimingが使われており、これがBunに実装されていないため動作しない。

Karma, Webpack, Puppeteer

複雑怪奇な構造になっているのでどこが原因かはわからないのだがPuppeteerを使ってテストを実行したところBun環境では動かなかった。

Terminal window
webpack was not included as a framework in karma configuration, setting this automatically...
17 05 2024 22:44:10.361:ERROR [karma-server]: Server start failed on port 9876: Error: No provider for "proxies"! (Resolving: webServer -> proxies)

try-puppeteer-in-bunなんていうものもあるので、こっちを利用したほうがいいのかもしれない。

Bun + NodeJS

じゃあどうすればいいんですか?

諦めてNodeJSを使いましょう。

ランタイムとして使うのではなく単にバンドラとかトランスパイラとして利用すればいい。

TypeScriptをそのままトランスパイルして実行できるし、ライブラリのインストールは速いしでそういう意味でも利用価値は高い。

FROM oven/bun:1.1.7
COPY --from=node:20.13.1 /usr/local/bin/node /usr/local/bin/node
COPY --from=node:20.13.1 /usr/local/lib/node_modules /usr/local/lib/node_modules
RUN ln -fs /usr/local/lib/node_modules/npm/bin/npm-cli.js /usr/local/bin/npm
RUN ln -fs /usr/local/lib/node_modules/npm/bin/npm-cli.js /usr/local/bin/npx
USER bun
WORKDIR /home/bun/app
CMD ["/bin/bash"]

例えばBunとNodeJSが融合したような環境がつくりたければ上のようにすればよい。

こうするとBunで実行できない機能があればNodeJSのAPIが利用される。

記事は以上。