静的ファイルサーバー

静的ファイルサーバー

@adonisjs/staticパッケージを使用して、指定されたディレクトリから静的ファイルを提供できます。このパッケージには、HTTPリクエストをインターセプトしてファイルを提供するために、サーバーミドルウェアスタックに登録する必要があるミドルウェアが付属しています。

インストール

パッケージはwebスターターキットとして事前に設定されています。ただし、他のスターターキットでも以下のコマンドを使用してインストールおよび設定できます。

以下のコマンドを使用してパッケージをインストールおよび設定します:

node ace add @adonisjs/static
  1. 検出されたパッケージマネージャーを使用して@adonisjs/staticパッケージをインストールします。

  2. adonisrc.tsファイル内に以下のサービスプロバイダーを登録します。

    {
    providers: [
    // ...他のプロバイダー
    () => import('@adonisjs/static/static_provider')
    ]
    }
  3. config/static.tsファイルを作成します。

  4. start/kernel.tsファイル内に以下のミドルウェアを登録します。

    server.use([
    () => import('@adonisjs/static/static_middleware')
    ])

設定

静的ミドルウェアの設定はconfig/static.tsファイルに保存されます。

import { defineConfig } from '@adonisjs/static'
const staticServerConfig = defineConfig({
enabled: true,
etag: true,
lastModified: true,
dotFiles: 'ignore',
})
export default staticServerConfig

enabled

ミドルウェアを一時的に有効または無効にすることなく、ミドルウェアスタックから一時的に削除するかどうかを設定します。

acceptRanges

Accept-Rangeヘッダーは、ブラウザがダウンロードを再開する代わりにダウンロードを再開しようとする代わりに、中断されたファイルのダウンロードを再開することを許可します。acceptsRangesfalseに設定することで、再開可能なダウンロードを無効にできます。

デフォルトはtrueです。

cacheControl

Cache-Controlヘッダーを有効または無効にします。cacheControlが無効になっている場合、immutableおよびmaxAgeプロパティは無視されます。

{
cacheControl: true
}

dotFiles

publicディレクトリ内のドットファイルのリクエストの扱い方を定義します。次のオプションのいずれかを設定できます。

  • allow:他のファイルと同じようにドットファイルを提供します。
  • deny403ステータスコードでリクエストを拒否します。
  • ignore:ファイルが存在しないかのように見せかけて404ステータスコードで応答します。
{
dotFiles: 'ignore'
}

etag

etagの生成を有効または無効にします。

{
etag: true,
}

lastModified

Last-Modifiedヘッダーを有効または無効にします。ファイルのstat.mtimeプロパティがヘッダーの値として使用されます。

{
lastModified: true,
}

immutable

Cache-Controlヘッダーのimmutableディレクティブを有効または無効にします。デフォルトでは、immutableプロパティは無効になっています。

immutableプロパティが有効になっている場合、キャッシュを有効にするためにmaxAgeプロパティを定義する必要があります。

{
immutable: true
}

maxAge

Cache-Controlヘッダーのmax-ageディレクティブを定義します。値はミリ秒または時間表現文字列である必要があります。

{
maxAge: '30 mins'
}

headers

レスポンスに設定するヘッダーのオブジェクトを返す関数です。関数は第1引数としてファイルパス、第2引数としてfile statsオブジェクトを受け取ります。

{
headers: (path, stats) => {
if (path.endsWith('.mc2')) {
return {
'content-type': 'application/octet-stream'
}
}
}
}

静的ファイルの提供

ミドルウェアが登録されると、publicディレクトリ内にファイルを作成し、ブラウザからファイルパスを使用してアクセスできます。たとえば、./public/css/style.cssファイルはhttp://localhost:3333/css/style.cssのURLを使用してアクセスできます。

publicディレクトリ内のファイルはアセットバンドラーを使用してコンパイルまたはビルドされません。フロントエンドのアセットをコンパイルする場合は、それらをresourcesディレクトリに配置し、アセットバンドラーを使用する必要があります。

静的ファイルの本番ビルドへのコピー

/publicディレクトリ内に格納されている静的ファイルは、node ace buildコマンドを実行すると自動的にbuildフォルダにコピーされます。

パブリックファイルのコピーのルールはadonisrc.tsファイルで定義されています。

{
metaFiles: [
{
pattern: 'public/**',
reloadServer: false
}
]
}