查看源代码 Phoenix.Digester.Compressor 行为 (Phoenix v1.7.14)

定义了用于实现静态文件压缩器的 Phoenix.Digester.Compressor 行为。

自定义压缩器需要实现 2 个函数。

默认情况下,Phoenix 仅使用 Phoenix.Digester.Gzip 来压缩静态文件,但可以定义其他压缩器并将其添加到摘要过程中。

示例

如果您想使用外部 Brotli 压缩库来压缩文件,您可以定义一个实现该行为的新模块,并将该模块添加到配置的 Phoenix 静态压缩器列表中。

defmodule MyApp.BrotliCompressor do
  @behaviour Phoenix.Digester.Compressor

  def compress_file(file_path, content) do
    valid_extension = Path.extname(file_path) in Application.fetch_env!(:phoenix, :gzippable_exts)
    {:ok, compressed_content} = :brotli.encode(content)

    if valid_extension && byte_size(compressed_content) < byte_size(content) do
      {:ok, compressed_content}
    else
      :error
    end
  end

  def file_extensions do
    [".br"]
  end
end

# config/config.exs
config :phoenix,
  static_compressors: [Phoenix.Digester.Gzip, MyApp.BrotliCompressor],
  # ...

总结

回调

链接到此回调

compress_file(t, binary)

查看源代码
@callback compress_file(Path.t(), binary()) :: {:ok, binary()} | :error
@callback file_extensions() :: [String.t(), ...]