Packages
fermo
0.17.0
0.20.1
0.20.0
0.19.2
0.19.1
0.19.0
0.18.1
0.18.0
0.17.1
0.17.0
0.16.7
0.16.6
0.16.5
0.16.4
0.16.3
0.16.2
0.16.1
0.16.0
0.15.0
0.14.9
0.14.8
0.14.7
0.14.6
0.14.5
0.14.4
0.14.3
0.14.2
0.14.1
0.14.0
0.13.9
0.13.8
0.13.7
0.13.6
0.13.5
0.13.4
0.13.2
0.13.1
0.13.0
0.12.1
0.12.0
0.11.1
0.11.0
0.10.0
0.9.1
0.9.0
0.8.4
0.8.3
0.8.2
0.8.1
0.8.0
0.7.1
0.7.0
0.6.4
0.6.3
0.6.2
0.6.1
0.6.0
0.5.1
0.5.0
0.4.0
0.3.0
0.2.4
0.2.2
0.2.1
0.2.0
0.1.8
0.1.7
0.1.6
0.1.5
0.1.4
0.1.3
0.1.2
0.1.1
0.1.0
A static site generator
Current section
Files
Jump to
Current section
Files
lib/webpack/assets.ex
defmodule Webpack.Assets do
@moduledoc """
Handles an external (Webpack) pipeline.
Runs the pipeline, then loads the manifest it produces into a GenServer
in order to provide asset name mapping.
"""
@webpack_config_path_default "webpack.config.js"
def build() do
if File.exists?(webpack_config_path()) do
System.cmd("yarn", ["run", "webpack"]) |> handle_build_result()
else
{:ok}
end
end
def load_manifest() do
manifest = "build/manifest.json"
|> File.read!
|> Jason.decode!
|> Enum.into(
# Ensure asset names have no initial '/', while
# asset paths do
%{},
fn
{"/" <> k, "/" <> v} -> {k, "/" <> v}
{"/" <> k, v} -> {k, "/" <> v}
{ k, "/" <> v} -> {k, "/" <> v}
{ k, v} -> {k, "/" <> v}
end
)
GenServer.call(:assets, {:put, manifest})
{:ok}
end
def webpack_config_path do
Application.get_env(
:fermo,
:webpack_config_path,
@webpack_config_path_default
)
end
defp handle_build_result({_output, 0}) do
load_manifest()
end
defp handle_build_result({output, _exit_status}) do
{:error, "External webpack pipeline failed to build\n\n#{output}"}
end
end