Skip to content

Tiny hex package to make the development experience of using gleam in elixir (and especially phoenix projects) better.

License

Notifications You must be signed in to change notification settings

praveenperera/gleam_compile

Repository files navigation

GleamCompile

Elixir + Gleam = ❤️

Hex.pm Hex.pm Hex.pm HexDocs.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

Note: Make sure gleam is already installed on your system.

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.2.0"}
      ]
    end
  2. Add :gleam to list of compilers, and the gleam folders to the erlc_paths 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] ++ Mix.compilers(),
       start_permanent: Mix.env() == :prod,
       releases: releases(),
       aliases: aliases(),
       deps: deps()
      ]
    end

Integrating 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)$"
        ]
      ]

Acknowledgements

License

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

About

Tiny hex package to make the development experience of using gleam in elixir (and especially phoenix projects) better.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages