🐈

(小ネタ)Cloudflare Wrangler の Update方法とNode.js 実行環境のまとめ

2023/04/04に公開

Cloudflare Workers が先日Node.jsをサポートしました。全ての機能がサポートされたわけではなく、AsyncLocalStorage、EventEmitter、Buffer、assertおよびutilの一部です。

詳しくはこちらのブログをご覧ください。

これに合わせてCLIツールであるWranglerもUpdateが必要だった(2.12以降)のですが、Update方法がよくわからずにはまったのでメモです。またNode.js実行環境を構築するための設定ファイルも従来と記述方法が少し変更となっていたため、その点も併せてメモがてら記事をアップしておきます。

Initialize済ProjectのWrangler Update方法
"wrangler init xxxxx" でプロジェクトをイニシャアライズした場合、プロジェクトフォルダーが作成されますが、そのフォルダー内ではWranglerのバージョンが固定されています。これをアップデートする場合以下のStepを踏む必要があります。
最新のWranglerがインストールされた状態でイニシャライズすれば問題ないのですが、過去作成済プロジェクトを今回のNode.js対応に適応させる際に、必要となるStepです。

1.package.jsonの修正
以下のWranglerバージョン指定を2.12以降にしておきます。最新版は2.14です。

{
  "name": "nodetest",
  "version": "0.0.0",
  "devDependencies": {
    "wrangler": "^2.14.0"
  },
  "private": true,
  "scripts": {
    "start": "wrangler dev",
    "deploy": "wrangler publish"
  }
}

その後以下のコマンドを実行します。

npm update -g wrangler
npm install

これで環境が切り替わります。私は2行目を忘れていて動作せずはまりました。

Node.js環境の構築
従来Node.jsをWorkersで動作させるためには
"wrangler publish node_compat true"と指定するかwrangler.tomlに"node_compat = true"と指定する必要がありました。これはポリフィル形式でnode環境を構築するためのコマンドであり、
今回のNode.js対応で用いる必要はありません。記載をしてしまうとダウングレードして動作します。
今回のNode.js対応はビルトイン形式で動作しますので、有効化させる場合以下をWrangler.tomlに記載します。

compatibility_flags = [ "nodejs_compat" ]

この環境で以下をDeployするとBufferが動作することがわかります。

import { Buffer } from "node:buffer"

export default {
  async fetch(request, env, ctx) {
    const buf = Buffer.from("hello world", "utf8")
    let hex = buf.toString("hex")
    let b64 = buf.toString("base64")
    console.log(`${hex} - ${b64}`)

    return new Response(`${hex}\n${b64}`);
  }
}

以上、小ネタメモでした。

Discussion