Nuxt の target と mode と ssr と各 npm コマンドについて
target
プロパティ
nuxt.config.js
で指定する
設定可能な値はserver
かstatic
のどちらかで、デフォルトはserver
これから開発するアプリのデプロイ先によって、この値を判断する
- サーバーホスティングの場合は、
server
- サーバー上で Nuxt を動かすとき
- EC2、ECS、レンタルサーバーなど
- 静的サイトホスティングの場合は、
static
- ホスティングサービスへブラウザがそのまま実行できる HTML や JS をデプロイするとき
- S3+CloudFront、Netlify、Vercel、Firebase Hosting など
mode
プロパティ
nuxt.config.js
で指定する
設定可能な値はspa
かuniversal
のどちらかで、デフォルトはuniversal
-
universal
- SSR + SPA
-
spa
- クライアントサイド(ブラウザ)で JS を実行し、HTML を生成する(CSR)
- 現在、この
spa
を設定するのは非推奨らしい- よって、
mode: universal
になる - SPA のみにしたい場合は、
ssr
プロパティでfalse
を設定する
- よって、
spa
が非推奨で、デフォルトuniversal
なので、このmode
プロパティのことは考えなくてよさそう
Nuxt を使っていて、今の所、ssr: false
を指定したくなるケースに遭遇したことはない
でも、最初からシンプルな SPA 構成にすると決めていたら、使えるかも
- SSR したい
- Nuxt(
ssr: true
)
- Nuxt(
- SPA のみだけど、Nuxt の規約に縛られたい
- Nuxt(
ssr: false
)
- Nuxt(
- SPA のみだけど、環境構築で楽したい
- Nuxt(
ssr: false
)or Vue CLI
- Nuxt(
- SPA のみで、上記に当てはまらない
- Vue 単体
target
プロパティとmode
プロパティとssr
プロパティのまとめ
-
target
プロパティは、デプロイ先によって設定値が決まる- サーバーホスティングの場合は
server
、静的サイトホスティングの場合はstatic
- サーバーホスティングの場合は
-
target
プロパティの設定値によって、後述するが使うコマンドも変わる -
mode
プロパティは考えなくてよさそう -
ssr
プロパティは、SSR するかしないかを決める
target
プロパティとssr
プロパティの組み合わせ
-
target: server
andssr: true
- SSR になる
-
target: server
andssr: false
- SPA になる
-
target: static
andssr: true
- SSG(full static)になる
- SSR された状態で、静的ファイルにビルドされる
-
target: static
andssr: false
- SSG(static)になる
- 静的ファイルにビルドされるが、ブラウザが
index.html
を読み込んだ時に JS を実行して画面をレンダリングする(SPA)
コマンド
npx create-nuxt-app
(TypeScript 利用)で環境構築すると以下のコマンドが使えるようになる
"scripts": {
"dev": "nuxt-ts",
"build": "nuxt-ts build",
"start": "nuxt-ts start",
"generate": "nuxt-ts generate"
}
また、@nuxt/typescript-runtime
パッケージがインストールされる
これは、ランタイムで TypeScript を実行できるようにするもので、技術的にはts-node
が使われている
この辺の処理をラップしたのが、@nuxt/typescript-runtime/bin
配下にいるnuxt-ts
というバイナリである
各コマンドは前述したtarget
プロパティによって、利用するコマンドが決まる
target: server
の場合
"scripts": {
"dev": "nuxt-ts",
"build": "nuxt-ts build",
"start": "nuxt-ts start"
}
開発用
dev
コマンドを実行すると.nuxt
ディレクトリにビルド結果が出力される
同時にサーバーを立ち上げる
HMR で開発できる
本番用
build
コマンドを実行すると.nuxt
ディレクトリにビルド結果が出力される
build
コマンドの後にstart
コマンドを実行し、サーバーを立ち上げる
target: static
の場合
"scripts": {
"dev": "nuxt-ts",
"generate": "nuxt-ts generate",
"start": "nuxt-ts start"
}
開発用
target: static
でもdev
コマンドが利用できる
仕様はtarget: server
とおそらく同じ
本番用
generate
コマンドを実行すると静的ファイルにビルドされ、dist
ディレクトリに結果が出力される
dist
ディレクトリの中身をそのままホスティングサイトへデプロイして、ホスティングサイトで設定したドメインにアクセスすれば、ブラウザがそのまま読み取れる
もし、ホスティングサイトへデプロイする前に確認したい場合は、start
コマンドを実行し、サーバーを立ち上げれば確認可能
普段の開発では、generate + start
コマンドだと開発体験が非常に悪いので、HMR が使えるdev
コマンドで開発し、デプロイする前にgenerate + start
コマンドで確認するのがよさそう
コマンドまとめ
-
dev
コマンドはtarget
の設定値に影響せず、たぶん同じ仕様 -
build
コマンドはtarget: server
専用 -
generate
コマンドはtarget: static
専用 -
start
コマンドはサーバーを立ち上げるが、target
の設定値によって、読み込むディレクトリが異なる
Discussion