Zenn
Open7

Nitro Server 設定、React Vue Svelte など

knaka Tech-Blogknaka Tech-Blog

Nitro Cloudflare デプロイ


概要

  • Nitro メモになります。

[ 公開 2025/03/01 ]


構成

  • Nitro
  • Cloudflare
  • node 20

参考


手順

  • nitro install 後
npm i wrangler
npx wrangler login
  • build
NITRO_PRESET=cloudflare_module npm run build

  • wrangler.toml , 参考
name = "nitro-app-2"
compatibility_date = "2024-09-19"
main = "./.output/server/index.mjs"

assets = { directory = "./.output/public/", binding = "ASSETS" }

[vars]
NITRO_HELLO_THERE="general"
SECRET="secret"

  • deploy , 以外と簡単でした。
npx wrangler deploy
knaka Tech-Blogknaka Tech-Blog

public フォルダから。jsファイル読み込む例

  • 初期設定 で、publicフォルダからファイル読めないようでした。
  • npx giget@latest nitro nitro-app --install の場合。

  • フォルダ構成の変更 の例。
  • public , routesのフォルダ作成
  • 又は、server/routes を。./routes に移動
  • server フォルダ削除
├─public
└─routes


  • nitro.config.ts
  • compatibilityDate 以外、一旦削除します。
export default defineNitroConfig({
  compatibilityDate: "2025-03-06"
});

  • routes/index.ts の、例
export default defineEventHandler((event) => {
  return "Start by editing <code>server/routes/index.ts</code>.";
});


  • 再起動
npm run dev

knaka Tech-Blogknaka Tech-Blog

React + Nitro構成

  • Nitro React スタック、作成内容になります。
  • front コンパイル: vite build

構成

  • Nitro
  • React SPA
  • node 20
  • vercel

書いたコード


  • start , http ://localhost:3000 画面起動です。
npx vite build
npm run dev

#OR
npx vite build && npm run dev

  • 編集時( 別window )
npx nodemon

  • tree : フォルダ参考
  • routes: 画面tsx
  • routes/api : API
  • src: front file
├── nitro.config.ts
├── nodemon.json
├── package.json
├── public
│   ├── static
│   │   └── entry-client.js
│   ├── test.js
│   └── test.txt
├── routes
│   ├── [name].ts
│   ├── api
│   │   ├── test.ts
│   │   ├── test2.ts
│   │   └── test3.ts
│   ├── hello.get.ts
│   └── index.ts
├── src
│   ├── App.tsx
│   └── entry-client.tsx
├── tsconfig.app.json
├── tsconfig.json
└── vite.config.ts
knaka Tech-Blogknaka Tech-Blog

Vue + Nitro構成

  • Nitro Vue スタック、作成内容になります。
  • front コンパイル: vite build

構成

  • Nitro
  • node 20

書いたコード


  • start , http ://localhost:3000 画面起動です。
npx vite build
npm run dev

#OR
npx vite build && npm run dev

  • 編集時( 別window )
npx nodemon

  • tree : フォルダ参考
  • routes: 画面.ts
  • routes/api : API
  • src: front file
 tree .
.
├── nitro.config.ts
├── nodemon.json
├── package.json
├── public
│   └── test.txt
├── routes
│   ├── [name].ts
│   ├── api
│   │   ├── test.ts
│   │   ├── test2.ts
│   │   └── test3.ts
│   ├── hello.get.ts
│   └── index.ts
├── src
│   ├── App.vue
│   ├── client
│   │   ├── About.vue
│   │   └── Home.vue
│   ├── main.ts
│   └── router.ts
├── tsconfig.app.json
├── tsconfig.json
└── vite.config.ts

  • package.json
{
  "type": "module",
  "private": true,
  "scripts": {
    "build": "nitro build",
    "dev": "nitro dev",
    "prepare": "nitro prepare",
    "preview": "node .output/server/index.mjs"
  },
  "dependencies": {
    "vue": "^3.4.21",
    "vue-router": "^4.3.0",
    "zod": "^3.24.2"
  },
  "devDependencies": {
    "@vitejs/plugin-vue": "^5.2.1",
    "nitropack": "latest",
    "nodemon": "^3.1.9",
    "vite": "^6.2.0",
    "vite-tsconfig-paths": "^5.1.4",
    "vue-tsc": "^2.1.10"
  }
}

knaka Tech-Blogknaka Tech-Blog

Vue + Nitro + drizzle, ユーザー追加 認証

  • Nitro Vue + drizzle 内容になります。

構成

  • Nitro
  • Vue
  • node 20
  • drizzle

書いたコード



  • .env
DB_FILE_NAME=file:local.db

  • ユーザー追加
  • vue_auth_drizzle/routes/api/users/create.ts
  • db.insert で追加。

https://github.com/kuc-arc-f/nitro_6ex/blob/main/vue_auth_drizzle/routes/api/users/create.ts


  • signup.vue 追加画面
  • vue_auth_drizzle/src/client/signup.vue

https://github.com/kuc-arc-f/nitro_6ex/blob/main/vue_auth_drizzle/src/client/signup.vue


  • tree
$ tree .
.
├── drizzle.config.ts
├── local.db
├── nitro.config.ts
├── nodemon.json
├── package.json
├── public
├── routes
│   ├── [name].ts
│   ├── api
│   │   ├── test.ts
│   │   ├── test2.ts
│   │   ├── test3.ts
│   │   └── users
│   │       ├── create.ts
│   │       └── login.ts
│   ├── hello.get.ts
│   └── index.ts
├── src
│   ├── App.vue
│   ├── client
│   │   ├── About.vue
│   │   ├── Home.vue
│   │   ├── Login.vue
│   │   └── signup.vue
│   ├── components
│   │   └── Home
│   │       └── HomeContent.vue
│   ├── db
│   │   └── schema.ts
│   ├── index.ts
│   ├── input.css
│   ├── lib
│   │   ├── LibConfig.ts
│   │   └── startProc.ts
│   ├── main.ts
│   └── router.ts
├── tsconfig.app.json
├── tsconfig.json
└── vite.config.ts
knaka Tech-Blogknaka Tech-Blog

firebase Authentication (認証) Nitro Vue

  • Nitro Vue + firebase Authentication 内容になります。

構成

  • firebase Authentication
  • Nitro
  • Vue
  • node 20

関連


書いたコード


手順

  • firebase Authentication画面から、firebaseの ApiKey等 取得する。

  • nitro.config.ts
  • runtimeConfig の追加に、firebaseの ApiKey等 設定
export default defineNitroConfig({
  compatibilityDate: "2025-01-30",
  runtimeConfig: {
    firebaseApiKey: "",
    firebaseAuthDomain: "",
    firebaseProjectId: "",
    firebaseStorageBucket: "",
    firebaseMessageSenderId: "",
    firebaseAppId: ""
  }
});

  • vue_auth_firebase/routes/api/users/login.ts

https://github.com/kuc-arc-f/nitro_6ex/blob/main/vue_auth_firebase/routes/api/users/login.ts



画面vue

  • vue_auth_firebase/src/client/Login.vue

https://github.com/kuc-arc-f/nitro_6ex/blob/main/vue_auth_firebase/src/client/Login.vue


  • vue_auth_firebase/src/client/signup.vue

https://github.com/kuc-arc-f/nitro_6ex/blob/main/vue_auth_firebase/src/client/signup.vue


  • tree
$ tree .
├── nitro.config.ts
├── nodemon.json
├── package.json
├── public
├── routes
│   ├── [name].ts
│   ├── api
│   │   ├── test.ts
│   │   ├── test2.ts
│   │   ├── test3.ts
│   │   └── users
│   │       ├── create.ts
│   │       └── login.ts
│   ├── hello.get.ts
│   └── index.ts
├── src
│   ├── App.vue
│   ├── client
│   │   ├── About.vue
│   │   ├── Home.vue
│   │   ├── Login.vue
│   │   └── signup.vue
│   ├── components
│   │   └── Home
│   │       └── HomeContent.vue
│   ├── input.css
│   ├── lib
│   │   ├── LibConfig.ts
│   │   ├── firebase.ts
│   │   └── startProc.ts
│   ├── main.ts
│   └── router.ts
├── tsconfig.app.json
├── tsconfig.json
└── vite.config.ts

knaka Tech-Blogknaka Tech-Blog

作業めも、異なるフロントJS 画面単位で、インポートする例、Nitro

  • 異なるフロントJS( React , Svelte, Vue) を画面単位で取り込み使うメモ
  • CSR部分のみ、取り込む例
  • 目的が、React等環境に 過去作成のsvelte画面を組込み、アプリ機能を追加したい
  • 公開の、OSSコード等を、同様に取り込み活用したい。
  • 公開 開発ドメインを、削減したい。

構成

  • Nitro
  • React , Svelte
  • node 20

手順の概要


手順の概要

  • [1] nitroの、ほぼCSR 空を準備
  • [2] 各 異なるフロントJS 、画面単位で ビルド(vite build)
  • [3] ベース部プロジェクトに。画面 取り込む
     例 svelte: public/page2.js を、ベース部のpublic/page2.js にコピーする。

ベース部 参考


画面、追加後のパスの予定

  • /page1 : react
  • /page2 : Svelte

Svelte ビルド:画面単位



  • src/client/page2.svelte
<script lang="ts">
</script>
  
<main>
  <div>
    <h1 class="text-3xl font-bold">page2</h1>
    <hr />
    <span><a href="/">[ home ]</a>
    </span>
  </div>
</main>

<style>
</style>

  • src/client/page2.ts
import { mount } from "svelte";
import App from './page2.svelte'

mount(App, { target: document.getElementById('app') });
console.log("#page2-start");

  • svelte_mpa/vite.config.ts

https://github.com/kuc-arc-f/nitro_5ex/blob/main/svelte_mpa/vite.config.ts

  • entry : ./src/client/page2.ts に、変更
    build: {
      lib: {
        entry: ["./src/client/page2.ts"],
        formats: ['es'],
        fileName: '[name]',
      },

  • svelte-build
npx vite build

  • js出力: public/static/page2.js に出力

ベース部 svelte 組込み

  • public/static/page2.js を、ベース部フォルダ public/static/page2.js コピー

  • SSR追加、routes/page2.ts
export default eventHandler(async (event) => {
  return `<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <title>page2</title>
</head>
<body>
    <div id="app"></div>
    <script type="module" src="/static/page2.js"></script>
</body>
</html>
  `;
});


  • ベース部 サーバー起動
npm run dev

localhost/page2 を、開くと。 svelte画面表示


React 画面ビルド

  • svelte と同様になります。


  • src/client/page1.tsx
import ReactDOM from 'react-dom/client'
import React from 'react'

const Page: React.FC = () => {
  return (
  <div className="text-3xl"><h1>page1</h1> 
    <hr />
    <span><a href="/">[ home ]</a>
    </span>
  </div>
  );
};
ReactDOM.createRoot(document.getElementById('app')).render(
  <div>
    <Page />
  </div>
);


  • SSR追加、確認用
  • routes/page1.ts
export default eventHandler(async (event) => {
  return `<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <title>Nitro Example</title>
</head>
<body>
    <div id="app"></div>
    <script type="module" src="/static/page1.js"></script>
</body>
</html>
  `;
});


  • vite.config.ts

  • entry : ./src/client/page1.tsx に、変更

    build: {
      lib: {
        entry: ["./src/client/page1.tsx"],
        formats: ['es'],
        fileName: '[name]',
      },

  • react-build
npx vite build

js出力: public/static/page1.js に出力


ベース部 react 組込み

  • public/static/page1.js を、ベース部 public/static/page1.js コピー

  • SSR追加、routes/page1.ts
export default eventHandler(async (event) => {
  return `<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <title>page1</title>
</head>
<body>
    <div id="app"></div>
    <script type="module" src="/static/page1.js"></script>
</body>
</html>
  `;
});


  • ベース部 サーバー起動
npm run dev

localhost/page1 を、開くと。 react画面表示

ログインするとコメントできます