Skip to main content

npm run start / build

起動につかうコマンドは、npm run start, npm run build がある

開発モード (ローカルサーバ用)

ビルド+ローカルサーバ実行 (開発モード)

bash
npm run start

→ これだけでローカルサーバが起動し、ブラウザが開かれる

プロジェクト内のファイルが変更されると自動で更新される (ホットリロード)。

本番モード (配布用)

ビルド

bash
npm run build

build/ フォルダに deploy 用の html が生成される

ローカルサーバ起動 (本番モード)

bash
npm run serve

→ ローカルサーバが起動し、ブラウザが開かれる

ホットリロードは無し

何のためにあるのかというと、デプロイ前に動作確認したいとき用
(更新時刻表示、検索プラグイン、draft表示など、開発用/本番用で動作のことなる部分の確認)

配布

Web サーバには build/ フォルダの中身をまるっとあげれば良い

→ 自分は AWS S3 に上げるので、このようにシェルスクリプト化している

bash
cd build
aws s3 sync . $AWS_S3_PATH --delete --acl public-read
aws cloudfront create-invalidation --distribution-id $AWS_CF_DIST --paths '/*'

# invalidation の節約版 (画像が多いと料金が大変なことになるので対策したもの)
# aws cloudfront create-invalidation --distribution-id $AWS_CF_DIST --paths '/*.html' '/*/*.html' '/*/*/*.html'

他のホスティングサービス等でのやり方については、公式ドキュメントにいろいろ載ってる。

https://docusaurus.io/docs/deployment

Docusaurus 開発モードと本番モードの違いについて

ドキュメントのどこかには書いているかもしれないが、HTMLソースを見たのをきっかけに気がついた。
SPA か SSG か、という違いあるようだ。

せっかくなので違いをまとめる。

表1. 本番モードと開発モードの違い

項目開発モード本番モード
コマンドnpm run startnpm run build
方式SPA (Single Page Application)SSG (Static Site Generation)
HTMLどう出るかソースで見ても中身はほぼカラ(JSで生成するから)各ページ毎に静的HTMLが生成される
画面遷移どうしてるかJavaScriptで仮想ページ遷移(DOM差替)ページ毎にHTML読み直し
ページ毎にリロードされるかされないされる
採用される理由ホットリロードで開発効率に良いSEO的に良い (クローラが処理しやすい)

レイヤが違うことを並べて書いているような気もしてきたので、別視点で書くと、こう。

  • npm run start 時は CSR 開発モードの SPA(擬似SSRあり) ← Client Side で Rendering してる
  • npm run build時は SSG による静的SPA 出力(本番環境向け) ← Server Side で Generation してる

あまり厳密に書いてもよく分からなくなってくるので、表のように捉えておくのも良いのかもしれない。

表2. アーキテクチャとしての使い分け (SPA vs SSG)

アーキテクチャ向いているケース
SPA (Single Page Application)アクセス後の画面操作が中心のUIアプリケーション
SSG (Static Site Generation)検索流入からのアクセスが中心で、ページ単位で読まれる構造のコンテンツサイト

・・という意味で、以下の点で理にかなっているということ

  • 開発モードは開きっぱなし操作を想定
  • 本番モードは検索流入を想定