PureScriptで静的ファイル配信できるパッケージ書いた

追記

本記事のパッケージは現在メンテされておりません。

サーバー向けパッケージは再実装されたものがこちらにあります。

Bucketchain

はじめに

静的ファイルを配信するときはとりあえずnginxなどにお任せすればいいかと思いつつも、 昨今ではTwelve-Factor Appの考え方もあり、静的ファイルの配信もアプリケーションサーバーでしようということで、 PureScriptで静的ファイル配信するパッケージを書きました。

本番ではCDNのオリジンとして動いてもらうという感じにはなると思います。

どんなやつ?

リポジトリGitHub - oreshinya/purescript-static-serve: Serve static filesです。

ランタイムはnodejs想定です。

とりあえず最低限ということで、雑に言うと以下の3つのみ対応しています。

  • 静的ファイル配信
  • maxageの設定
  • 条件付きGETの対象については、Last-Modifiedのみ対応しておりETagは対応していません。

使い方

module Main where

import Prelude

import Control.Monad.Eff (Eff)
import Data.JSDate (LOCALE)
import Data.Maybe (Maybe(..))
import Node.FS (FS)
import Node.HTTP (HTTP, ListenOptions, createServer, listen)
import StaticServe (staticHandler)



config :: ListenOptions
config =
  { hostname: "0.0.0.0"
  , port: 3000
  , backlog: Nothing
  }



main :: forall e. Eff (fs :: FS, http :: HTTP, locale :: LOCALE | e) Unit
main = do
  server <- createServer $ staticHandler { root: "./public", maxAge: 60 }
  listen server config $ pure unit

現段階では、設定としては、rootディレクトリの設定とmaxageの設定のみです。

この例だとpublic以下に置いたファイルが配信されるようになります。

さいごに

やったぁPureScriptで静的ファイル配信できるようになったぁ(小並感)

(このパッケージがエッジケースに対応できているかは微妙な感じです。)

追記

昨日作ったこのパッケージにHistory API Fallback機能つけました。これでSPAもオッケーです。