3月くらいにもなんか発表されてた気がするけど、結局いまどういう状態やっけ?って思ったので、思い出しついでにまとめる。
2パターンある
最初はよくわからなかったけど、どうやら、
- `nodejs_compat`
- `node_compat`
という2つのフラグが存在してる。最初はフラグ名くらい統一しろよ・・って思ってしまったけど、これらは別のやつ。
ちなみに、`node_compat`のほうはLegacy扱いらしく、これらを併用することはできなそう。
nodejs_compat
Node.jsのAPIの一部を、CFWのランタイムでも動かせるようになるフラグ。
一部というのは、現状でいうと、
- `node:assert`
- `AsyncLocalStorage, AsyncResource` from `node:async_hooks`
- `Buffer` from `node:buffer`
- `EventEmitter` from `node:events`
- `promisify, callbackify, types` from `node:util`
だけ。
ポリフィルムではなくCFWとして実装されてるので、パフォーマンスもサイズもヨシってところがポイントで、今後の拡充にこうご期待という触れ込み。
`workerd`的にはこのへんに実装が増えていく。
https://github.com/cloudflare/workerd/tree/main/src/node
https://github.com/cloudflare/workerd/tree/main/src/workerd/api/node
`wrangler dev`をローカルでやりたい場合は、通常の`--local`ではなく`--experimental-local`をあわせて使う必要がある。(そのうちexperimentalじゃなくなるらしい)
`wrangler@v2.20.0`時点では、`nodejs_compat`自体をCLIから渡す方法はなさそうで、`wrangler.toml`に書くしかない模様。
node_compat
こっちは、Node.jsのAPIポリフィルがロードされるようになるフラグ。
実態は、
- wranglerが内部で利用してるesbuildのプラグインである
- `@esbuild-plugins/node-globals-polyfill`と
- `@esbuild-plugins/node-modules-polyfill`が依存してる
- `rollup-plugin-node-polyfills`
ってだけ。
さっきのと違って、これは単なるポリフィルなので、ファイルサイズも増えるし、思わぬ挙動の差異に出くわすかもしれない。
こっちは`--node-compat`っていうCLI引数がある。
おまけ: Outbound TCP
思い返せば2021年末くらいの話だったが、まだ一般人向けではなく、アクセスフォームがあるだけ。
https://www.cloudflare.com/database-connectors-early-access/
ただ内部的には着々と進んでる感があって、先日も中の人たちが盛り上がってたので、近いうちにナニカあるかもしれない?