PureScriptで静的ファイル配信できるパッケージ書いた
追記
本記事のパッケージは現在メンテされておりません。
サーバー向けパッケージは再実装されたものがこちらにあります。
はじめに
静的ファイルを配信するときはとりあえず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で静的ファイル配信できるようになったぁ(小並感)
(このパッケージがエッジケースに対応できているかは微妙な感じです。)