GleamCompile

Elixir + Gleam = ❤️

Hex.pmHex.pmHex.pmHexDocs.pm


Description

A tiny hex package makes it easier to use gleam in elixir and phoenix projects

This package does two things

  1. Runs the gleam compiler
  2. In development it automatically reloads the gleam files when recompiled

Demo with Phoenix Live Reload

Explainer

Installation

This package is available on hex.

  1. The package can be installed by adding gleam_compile to your list of dependencies in mix.exs:

    def deps do
      [
        {:gleam_compile, "~> 0.1.0"}
      ]
    end
  2. Add :gleam to list of compilers in your mix.exs

    def project do
      [
       app: :jib,
       version: "0.1.0",
       elixir: "~> 1.5",
       elixirc_paths: elixirc_paths(Mix.env()),
       erlc_paths: ["src", "gen"],
    +  compilers: [:gleam],
       start_permanent: Mix.env() == :prod,
       releases: releases(),
       aliases: aliases(),
       deps: deps()
      ]
    end

Intergrating with Phoenix Live Reloader

  1. Add :gleam to list of compilers in your mix.exs

    compilers: [:phoenix, :gettext, :gleam] ++ Mix.compilers()
      def project do
     [
       app: :jib,
       version: "0.1.0",
       elixir: "~> 1.5",
       elixirc_paths: elixirc_paths(Mix.env()),
       erlc_paths: ["src", "gen"],
    -  compilers: [:phoenix, :gettext] ++ Mix.compilers(),
    +  compilers: [:phoenix, :gettext, :gleam] ++ Mix.compilers(),
       start_permanent: Mix.env() == :prod,
       releases: releases(),
       aliases: aliases(),
       deps: deps()
     ]
    end
  2. In dev.exs add this line in the Endpoint config

    reloadable_compilers: [:gettext, :phoenix, :elixir, :gleam],
    config :my_app, MyAppWeb.Endpoint,
      http: [port: 4000],
      debug_errors: true,
      code_reloader: true,
      check_origin: false,
    + reloadable_compilers: [:gettext, :phoenix, :elixir, :gleam],
      watchers: [
        node: [
          "node_modules/webpack/bin/webpack.js",
          "--mode",
          "development",
          "--watch-stdin",
          cd: Path.expand("../assets", __DIR__)
        ]
      ]
  3. Add gleam files to the live_reload patterns

    ~r"src/.*(gleam)$",
    config :my_app, MyAppWeb.Endpoint,
      live_reload: [
        patterns: [
          ~r"priv/static/.*(js|css|png|jpeg|jpg|gif|svg)$",
          ~r"priv/gettext/.*(po)$",
    +     ~r"src/.*(gleam)$",
          ~r"lib/jib_web/{live,views}/.*(ex)$",
          ~r"lib/jib_web/templates/.*(eex)$"
        ]
      ]

License

GleamCompile is released under the Apache License 2.0 - see the LICENSE file.