事象
Laravel + Vite環境でサブドメインルーティングを使って、複数のサブドメインのサービスをモノリポ……というか、一つのLaravelプロジェクトで管理したかった。
その際のCSSやJSのコンパイルの開発環境で使うViteのサーバ(localhost:5173)に、CSSやJSを取りに行くとCORSエラーが発生しCSSやJSの効果が反映されない。
解決方法
前提
- Viteのサーバ(
npm run dev
で起動するサーバ)は開発用なので本番運用しない。 - localでの開発ではhostsに
a.localhost
,b.localhost
などのサブドメインを定義しているものとする- なお、SwitchHostsを使うとこの辺の管理は便利です
- サブドメインは決まっている
解決方法
vite.config.js
のserver
の項目に以下のような設定を行います
cors: {
// ここにドメインの数だけ定義を追加する
origin: [
'http://localhost',
'http://a.localhost',
'http://b.localhost',
],
methods: ['GET', 'POST'],
credentials: true
}
全体のコードサンプル
import {defineConfig} from 'vite';
import laravel from 'laravel-vite-plugin';
export default defineConfig({
plugins: [
laravel({
input: [
'resources/css/app.css',
'resources/js/app.js',
],
refresh: true,
}),
],
server: {
host: true,
hmr: {
host: 'localhost',
},
watch: {
usePolling: true,
},
cors: {
origin: [
'http://localhost',
'http://a.localhost',
'http://b.localhost',
],
methods: ['GET', 'POST'],
credentials: true
}
}
});
関連記事
この記事を書いた人
Nな人(えぬなひと)。
Nは本名から取っています。
Laravelが大好きなPHPerで、WEBを作るときはLaravelを技術スタックに絶対推すマン。
PHP、Pythonと、昔はperlを書いていたP言語エンジニア。
最近はNimを書いたりしています。
Nは本名から取っています。
Laravelが大好きなPHPerで、WEBを作るときはLaravelを技術スタックに絶対推すマン。
PHP、Pythonと、昔はperlを書いていたP言語エンジニア。
最近はNimを書いたりしています。