◆ 簡単に使える

HTML や JavaScript などの静的ファイルホストする Web サーバがほしいとき Node.js しかない環境だと serve を使ってます

お手軽ですし 自動で作ってくれるインデックスページも見やすいです

しかし SPA ページを作るときに困りました
アクセスしたパスに静的ファイルがあるならそれを返す部分はいいのですが 存在しない場合にデフォルトの HTML ファイルを常に返してほしいです
serve ではその設定ができないようです

中で使ってるのは server-handler というパッケージなので これを直接 JavaScript から使って sendError に見つからなかったときの処理として デフォルトの HTML を返すようにすれば一応可能です
ただ これをするとインストールしてすぐに短いコマンドを打つだけで使えるというメリットがなくなります

それなら別のパッケージ探したほうが良さそう
ということで デフォルトの HTML を設定できる静的ファイルサーバを探してみました

servor

https://www.npmjs.com/package/servor

正確には 「Servør」 という名前のようです
o がアルファベットではなく o に斜めの線が入ってます
e っぽくみえるというやつですね

もともとは http-server-spa という名前だったようです
これの新しい版で名前を servor に一新したみたいです

こっちのほうが短くて打ちやすいのでいいですね
肝心の使い方は

servor <root> <fallback> <port>

よく使いそうなのがオプション名なしで書けます

fallback はデフォルトの HTML です
index.html がデフォルトなので多くの場合省略できます

グローバルインストールでもいいですが npx で

npx servor

のようにつかうこともできます

その他

その他にも preact-cli のテンプレートで使われていた sirv や preact serve の選択肢にあった superstatic でもできそうです
しかしどっちも servor ほど使いやすくはなさそうです

sirv は使えるコマンドが start しか書いてないのに例には build などもあって それらの説明が書いてないです
--single オプションで SPA として使えるらしいのですがデフォルトファイルをどう指定するかも書かれてません
cli じゃない本体の方の API を見てみると single には触れられてもいないです

superstatic は設定ファイルで rewrite できるようです
書き方は違うものの Apache の設定みたいなイメージですね
細かく設定したいなら良いかもしれませんがお手軽にやりたいのでこれは向いてませんでした

それ以外には http-server ではファイルが見つからないときに 404.html というマジックファイルが使われるのでこれを使って SPA を実現できるようです
見つからないので 404 なのですが なんかこれじゃない感があります
試してませんが その場合のレスポンスのステータスコードは 200 なのか 404 なのかどっちなんでしょう?

とりあえず servor が一番良さそうでした