今回の材料はこちら:
- Vite
- React
- pnpm
- React Router (Declarative mode)
プロジェクトをつくる
- まずは pnpm を導入する。
npm install -g pnpm@latest-10
-
vite でプロジェクトを作る。
-
variant に React Router が存在するが、Declararive mode を使いたいので選択しない(選んだ場合は FrameWork mode になる)。
- 今回はシンプルにしたいということで・・・
-
SWC はコンパイルが速いらしいのでお試しで選んだ。
pnpm create vite
│
◇ Project name:
│ test-proj-vite
│
◇ Select a framework:
│ React
│
◇ Select a variant:
│ TypeScript + SWC
│
◇ Scaffolding project in /home/logwion/dev/test-proj-vite...
│
└ Done. Now run:
cd test-proj-vite
pnpm install
pnpm run dev
最後の 3 つを実行すると開発環境が立ち上がる。
$ cd test-proj-vite/
logwion:~/test-proj-vite$ pnpm install
Packages: +150
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Progress: resolved 201, reused 63, downloaded 87, added 150, done
Downloading @swc/[email protected]: 21.97 MB/21.97 MB, done
Downloading @swc/[email protected]: 16.44 MB/16.44 MB, done
dependencies:
+ react 19.1.0
+ react-dom 19.1.0
devDependencies:
+ @eslint/js 9.28.0
+ @types/react 19.1.7
+ @types/react-dom 19.1.6
+ @vitejs/plugin-react-swc 3.10.2
+ eslint 9.28.0
+ eslint-plugin-react-hooks 5.2.0
+ eslint-plugin-react-refresh 0.4.20
+ globals 16.2.0
+ typescript 5.8.3
+ typescript-eslint 8.34.0
+ vite 6.3.5
╭ Warning ───────────────────────────────────────────────────────────────────────────────────╮
│ │
│ Ignored build scripts: @swc/core, esbuild. │
│ Run "pnpm approve-builds" to pick which dependencies should be allowed to run scripts. │
│ │
╰────────────────────────────────────────────────────────────────────────────────────────────╯
Done in 673ms using pnpm v10.12.1
あとは pnpm run devで立ち上げればおっけー
React Router を雑につかう
- Login コンポーネントを用意して main.tsx を適当に編集
<StrictMode>
<BrowserRouter>
<Routes>
<Route path="/" element={<App />} />
<Route path="/login" element={<Login />} />
</Routes>
</BrowserRouter>
</StrictMode>
ビルドする
$ pnpm run build
> [email protected] build /home/mikumo/dev/test-proj-vite
> tsc -b && vite build
vite v6.3.5 building for production...
✓ 41 modules transformed.
dist/index.html 0.46 kB │ gzip: 0.30 kB
dist/assets/react-CHdo91hT.svg 4.13 kB │ gzip: 2.05 kB
dist/assets/index-D8b4DHJx.css 1.39 kB │ gzip: 0.71 kB
dist/assets/index-b_9QMGOO.js 222.72 kB │ gzip: 71.77 kB
✓ built in 575ms
-
実行後に dist フォルダが生えるのでお好みのサーバーに配置する
-
静的ファイルの場合は JS でルーティングを処理しているので Nginx or Apache の設定が必要
- 例えば今回の場合だと/login を開くと物理的なディレクトリに移動しようとして目的のページが表示されない
-
全部のリクエストを index.html に返すように設定すれば OK
-
Apache の場合
- 適当なので鵜呑みにしないでください
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.html$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.html [L]
</IfModule>