Volt.Builder (Volt v0.9.1)

Copy Markdown View Source

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

Walks the dependency graph from entry files, splits code at dynamic import boundaries, compiles everything through the Pipeline, bundles each chunk with OXC.bundle/2, 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")

  • :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")

  • :code_splitting — split dynamic imports into separate chunks (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"}