グレアム&エリクサー
更新:これは非常に最初の探査だった.現在、公式のプロジェクトがありますmix_gleam プラグイン.それをチェックしてください!
アットContact Stack , 我々は、技術スタックのコアとしてエリクシール&フェニックスを選んだし、我々は選択に満足している.でも.私たちは本当に良いタイプのシステムと役に立つコンパイラElm ) 開発を通じて私たちを導く.
Elixirはビーム仮想マシンを対象とし、ビームをターゲットにする静的型付け言語はほとんど存在しない.ここでは、統合のための簡単なセットアップを調べるつもりですGleam を使用してあなたのエリクサープロジェクトにMix Compiler Task .
Gleamは、いくつかのMLフレーバー言語よりもJavaScript、CまたはJavaプログラマに、より近づきやすい構文を使用する静的型付け機能プログラミング言語です.gleamコンパイラは錆に書かれてerlangのソースファイルを出力し,erlangのソースファイルを出力します.
ミックスは、多機能プロジェクトのための多機能ビルドツールです.これは依存関係を管理し、テストを実行し、タスクを実行し、あなたのElixirコードをコンパイルすることができます.また、デフォルトでErlangファイルをコンパイルし、他の言語をコンパイルするミックスコンパイラタスクで拡張することができます.Gleamコンパイラを使用してgleamファイルをビルドできるように、GLEAM用のミックスコンパイラタスクを作成します.
以下の手順を試して、デモリポジトリをチェックしてください.https://github.com/michaeljones/gleam-phoenix-mix .
ここで我々は行く!
私たちはあなたが
現在、我々はAをセットアップすることを通して行きますPhoenix プロジェクト.我々は詳細に行くつもりはないが、ちょうど私たちは仕事に明確な拠点を持っている.
次のコマンドを実行して、空のフェニックスプロジェクトを設定します.
Elxirコンパイラを実行し、ミックスタスクをコンパイルする前にコンパイルします.
Erlangファイル用.The
ElxirとコンパイルされたGleamファイルの相互運用の簡単なデモンストレーションとして、次の変更を行います
そして、次の変更を行います
あなたがGithubの上でこのデモンストレーションRepoで最終結果をチェックすることができる好奇心が強いならば、思い出してくださいhttps://github.com/michaeljones/gleam-phoenix-mix
最後の思考
Gleamコードをミックスを使用してエリクサープロジェクトに組み込むのはあまり難しくないのを見て、それは刺激的です.ミックスは、この種の拡張性を念頭に構築されて素晴らしいです.答えるために確かにより多くの質問があります、そして、ラフな端は滑らかにします、しかし、それはビームに強くタイプされた言語を使用するために通りを持つことが刺激的です.
アットContact Stack , 我々は、技術スタックのコアとしてエリクシール&フェニックスを選んだし、我々は選択に満足している.でも.私たちは本当に良いタイプのシステムと役に立つコンパイラElm ) 開発を通じて私たちを導く.
Elixirはビーム仮想マシンを対象とし、ビームをターゲットにする静的型付け言語はほとんど存在しない.ここでは、統合のための簡単なセットアップを調べるつもりですGleam を使用してあなたのエリクサープロジェクトにMix Compiler Task .
Gleamは、いくつかのMLフレーバー言語よりもJavaScript、CまたはJavaプログラマに、より近づきやすい構文を使用する静的型付け機能プログラミング言語です.gleamコンパイラは錆に書かれてerlangのソースファイルを出力し,erlangのソースファイルを出力します.
ミックスは、多機能プロジェクトのための多機能ビルドツールです.これは依存関係を管理し、テストを実行し、タスクを実行し、あなたのElixirコードをコンパイルすることができます.また、デフォルトでErlangファイルをコンパイルし、他の言語をコンパイルするミックスコンパイラタスクで拡張することができます.Gleamコンパイラを使用してgleamファイルをビルドできるように、GLEAM用のミックスコンパイラタスクを作成します.
以下の手順を試して、デモリポジトリをチェックしてください.https://github.com/michaeljones/gleam-phoenix-mix .
ここで我々は行く!
私たちはあなたが
gleam
実行する環境で利用できるコンパイラ.これを実行してチェックします.gleam --version
あなたがそうしないならば、あなたはinstallation instructions Gleam Docsの上で現在、我々はAをセットアップすることを通して行きますPhoenix プロジェクト.我々は詳細に行くつもりはないが、ちょうど私たちは仕事に明確な拠点を持っている.
次のコマンドを実行して、空のフェニックスプロジェクトを設定します.
mkdir gleam-phoenix-mix
cd gleam-phoenix-mix
mix phx.new . --app my_app
mix ecto.create
cd assets
npm install
cd ..
今、ミックスコンパイラタスクを作成する必要があります.これをaに入れますlib/mix/tasks/compile
モジュール名を反映するディレクトリを指定しますMix.Tasks.Compile.Gleam
. そこで新しいディレクトリを作ります.mkdir -p lib/mix/tasks/compile/
ファイルに次のコードを追加するlib/mix/tasks/compile/gleam.ex
.defmodule Mix.Tasks.Compile.Gleam do
use Mix.Task.Compiler
def run(_args) do
System.cmd("gleam", ["build"])
:ok
end
end
これは本当に、gleamコンパイラを' build '引数で直接実行することです.Elxirコンパイラを実行し、ミックスタスクをコンパイルする前にコンパイルします.
mix compile.elixir
Gleamを幸せにするために、我々はAをセットアップする必要があります.toml
設定ファイル.それで、私たちはgleam.toml
コンテンツの次のプロジェクトのルートで.name = "my_app"
それから、我々はsrc
ファイルのディレクトリ.gleamコンパイラはgleamファイルをsrc
ディレクトリ.これはElixir/Mixと異なりますlib
デフォルトディレクトリ.Elixir/ミックスはGleamで書くことができないときに設定することができます.mkdir src
それから、私たちのgleamモジュールを作成しますsrc/hello_world.gleam
次のコードを使用します.pub fn hello() {
"Hello, from gleam!"
}
次に次のように変更しますmix.exs
ファイルを実行するコンパイラのリストにコンパイラタスクを追加するファイルmix compile
そして、ミックスのerlangコンパイラがgen
フォルダErlangファイル用.The
gleam
コンパイラコンパイル.gleam
からのファイルsrc
フォルダ.erl
中のファイルgen
ので、私たちはerlangコンパイラをそこに見つける必要があります. 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,
aliases: aliases(),
私は、MIXがスタートからリストの終わりまでコンパイラを実行すると仮定します.だから我々は:gleam
エントリは:erlang
エントリーMix.compilers()
gleamコンパイラが作成したerlangファイルをコンパイルしコンパイルした後にErlangコンパイラが実行されます.ElxirとコンパイルされたGleamファイルの相互運用の簡単なデモンストレーションとして、次の変更を行います
lib/my_app_web/controllers/page_controller.ex
: defmodule MyAppWeb.PageController do
use MyAppWeb, :controller
def index(conn, _params) do
- render(conn, "index.html")
+ render(conn, "index.html", title: :hello_world.hello())
end
end
これはgleamモジュールがErlangモジュールにコンパイルされているためです.ElxirではErlangモジュールは自分の名前であるatomを通してアクセス可能です.そして、次の変更を行います
lib/my_app_web/templates/page/index.html.eex
: <section class="phx-hero">
- <h1><%= gettext "Welcome to %{name}!", name: "Phoenix" %></h1>
+ <h1><%= @title %></h1>
<p>A productive web framework that<br/>does not compromise speed or maintainability.</p>
</section>
最後に実行できます.mix compile
mix phx.server
と負荷http://localhost:4000
ブラウザで「こんにちは、Gleamから」を参照してくださいスタンダードフェニックス歓迎ページの中心に.あなたがGithubの上でこのデモンストレーションRepoで最終結果をチェックすることができる好奇心が強いならば、思い出してくださいhttps://github.com/michaeljones/gleam-phoenix-mix
最後の思考
Gleamコードをミックスを使用してエリクサープロジェクトに組み込むのはあまり難しくないのを見て、それは刺激的です.ミックスは、この種の拡張性を念頭に構築されて素晴らしいです.答えるために確かにより多くの質問があります、そして、ラフな端は滑らかにします、しかし、それはビームに強くタイプされた言語を使用するために通りを持つことが刺激的です.
Reference
この問題について(グレアム&エリクサー), 我々は、より多くの情報をここで見つけました https://dev.to/contact-stack/mixing-gleam-elixir-3fe3テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol