くらげになりたい。

くらげのようにふわふわ生きたい日曜プログラマなブログ。趣味の備忘録です。

Bun workspace+Turborepo+Nuxt3を試してみる(GCP/Firebaseとかも)

TurborepoでもBun.shが対応されたっぽいので、
BunのqorkspaceでNuxt3を試してみたときに備忘録(*´ω`*)

ただ、Turborepoのドキュメントにはbunに関しての説明がないので、
ちょっと困った。。

ディレクトリ構成

ディレクトリ構成はこんな感じ。

- workspaces/
  - nuxt-app/
    - nuxt.config.ts
    - package.json
- bun.lockb
- package.json
- turbo.json

workspaceの設定

Bunのworkspace機能は、npmと同じ感じで、
pakcage.jsonworkspacesで設定する。

// package.json
{
  "name": "@myapp/monorepo",
  "private": true,
  "workspaces": ["workspaces/*"],
  "scripts": {
    "build": "turbo run build",
    "dev": "turbo run dev"
  },
  "devDependencies": {
    "turbo": "^1.10.14"
  },
  "packageManager": "bun@1.0.3"
}

基本的にはTurborepoのnpm workspacesと同じ感じで設定。

packageManagerにはbun@を設定しておくと、
bunのlockfile(bun.lockb)を使ってくれるようになるよう。

turborepoの設定

builddevが使えるように、
turbo.jsonを用意しておく。

// turbo.json
{
  "$schema": "https://turbo.build/schema.json",
  "pipeline": {
    "build": {
      "dependsOn": ["^build"]
    },
    "dev": {
      "cache": false,
      "persistent": true
    }
  }
}

nuxt-appの設定

Nuxtではbunを使ったinstallが書かれているので、
その形で進めればOK

$ bunx nuxi@latest init <project-name>

このままだと、Nuxtで使ってるサーバがNode.jsのまま。

// nuxt-app/.output/nitro.json
{
  "date": "2023-09-29T06:26:55.564Z",
  "preset": "node-server",
  "commands": {
    "preview": "node ./server/index.mjs"
  }
}

Bunを利用するようにpresetを変更しておく。

  // nuxt-app/nuxt.config.ts
  export default defineNuxtConfig({
+   nitro: { preset: "bun" },
    devtools: { enabled: true },
  });

設定してからbun run buildを実行すると、
bunを利用したnitro.jsonを出力してくれる。

// nuxt-app/.output/nitro.json
{
  "date": "2023-09-29T06:29:42.542Z",
  "preset": "bun",
  "commands": {
    "preview": "bun run ./server/index.mjs"
  }
}

corepackのBun対応状況

現時点ではまだ未対応っぽいけど、対応されそう。

Turborepo側でそれについても書かれていた。

We're intentionally breaking the rules about packageManager. That warning does not introduce bugs and can be safely ignored.

GCPのBuildpackについて

現時点ではBunについては書かれていない。

ただ、Dockerイメージは公開されているので、

こんな感じでイメージを作れば良さそう。

FROM oven/bun:latest

COPY package.json ./
COPY bun.lockb ./
COPY src ./

RUN bun install

Firebaseについて

firebaseでissueを検索すると、いくつか見つかる。

firebase-adminとかはまだ未対応が残ってるっぽい。

Cloud Functionsとかもあるので、まだ気になるところ。。


以上!! すこしずつ対応されているので、GCPやFirebaseのほうも期待(*´ω`*)

参考にしたサイトさま