Volt.Builder (Volt v0.13.1)

Copy Markdown View Source

Production build — resolve dependencies, split chunks, bundle, and write assets.

Walks the dependency graph from entry files, compiles source through Volt.Pipeline, expands Vite-compatible features such as import.meta.glob() and dynamic import variables, bundles chunks with OXC.bundle/2, rewrites CSS and JavaScript asset references, and writes content-hashed output files with a manifest.

Summary

Functions

Build production assets from one or more entry files.

Types

build_result()

@type build_result() :: %{
  js:
    %{path: String.t(), size: non_neg_integer()}
    | [%{path: String.t(), size: non_neg_integer()}],
  css: %{path: String.t(), size: non_neg_integer()} | nil,
  manifest: %{required(String.t()) => String.t()}
}

Functions

build(opts)

@spec build(keyword()) :: {:ok, build_result()} | {:error, term()}

Build production assets from one or more entry files.

Options

  • :entry — entry file path or list of paths (required)

  • :outdir — output directory (default: "priv/static/assets")

  • :public_dir — optional Vite-style public directory copied to the static root as-is

  • :target — JS target (e.g. :es2020)

  • :minify — minify output (default: true)

  • :sourcemap — generate source maps (default: true)

  • :define — compile-time replacements

  • :node_modules — path to node_modules (default: auto-detect)

  • :resolve_dirs — additional directories to resolve bare specifiers (e.g. ["deps"])

  • :name — output base name (default: derived from entry filename)

  • :aliases — import alias map (e.g. %{"@" => "assets/src"})

  • :plugins — list of Volt.Plugin modules

  • :mode — build mode for env variables (default: "production")

  • :env_prefix — env variable prefix or prefixes exposed to client code (default: "VOLT_")

  • :asset_url_prefix — public URL prefix for emitted asset references (default: "/assets")

  • :code_splitting — split dynamic imports into separate chunks (default: true)

  • :tree_shaking — remove unused exports (default: true)

  • :chunks — manual chunk definitions, map of chunk name to list of patterns:

    chunks: %{"vendor" => ["vue", "vue-router"], "ui" => ["assets/src/components"]}
  • :external — specifiers to exclude from the bundle and access as globals. Accepts a list (global name auto-derived) or a map of specifier => global_name:

    external: ["vue", "phoenix"]
    external: %{"vue" => "Vue", "phoenix" => "Phoenix"}