Обновление 2018–11–19: обновлены ссылки для использования стабильной версии Phoenix 1.4.
Elm 0.19 был выпущен не так давно, а Phoenix 1.4 только вышел, что принесло с собой переход с Brunch на Webpack.
Поскольку мне нравится играть с новыми вещами, я создал проект Phoenix 1.4, способный создавать код Elm. Столкнувшись с несколькими причудами, я решил написать простое пошаговое руководство с подробным описанием процесса и парочку приемов, которые могут оказаться полезными.
1 - Установите Phoenix 1.4
Если вы еще не установили новую версию Phoenix, вы можете сделать это с помощью следующих команд
$ mix archive.uninstall phx_new
$ mix archive.install hex phx_new 1.4.0
2 - Создайте проект
В том, как работает создание проекта, мало что изменилось. Я создам проект с флагом --no-ecto
, чтобы я мог протестировать его без установки базы данных, но вы можете удалить его, если он вам нужен.
$ mix phx.new my_project --no-ecto
После создания проекта позвольте Phoenix установить ресурсы и перейти к следующему шагу.
3 - Установить и настроить elm-webpack-loader
Следующим шагом будет установка elm-webpack-loader
.
$ cd my_project/assets $ npm install --save-dev elm-webpack-loader
Это также позаботится об установке компилятора Elm локально, что я предпочитаю вместо того, чтобы устанавливать его глобально, так как я большой поклонник автономных проектов, где я могу сказать: «Клонируйте репозиторий, выполните эти команды, и вы хорошо идти ».
Чтобы настроить elm-webpack-loader
, добавьте это в массивrules
вашего webpack.config.js
... module: { rules: [ ... { test: /\.elm$/, exclude: [/elm-stuff/, /node_modules/], use: { loader: 'elm-webpack-loader', options: { debug: options.mode === "development" } } } ...
Эта конфигурация позволит использовать полезный отладчик Elm во время компиляции в режиме разработки.
4 - Инициализировать проект Elm
Если вы находитесь в каталоге assets
, вы можете получить доступ к двоичному файлу Elm (поскольку версия 0.19 объединила все в одном исполняемом файле) с помощью ./node_modules/.bin/elm
, но обычно я добавляю в свой package.json сценарий, который просто
{ ... "scripts": { ... "elm": "elm" } }
Таким образом, я могу использовать npm run elm
как эквивалент команды elm
.
Теперь мы инициализируем наш проект Elm. Пока все еще в каталоге assets
, просто выполните
$ npm run elm init # (or ./node_modules/.bin/elm init)
Это создаст elm.json
файл с основными зависимостями и src
папку, в которую вы поместите свои источники Elm.
Это также хороший момент для добавления каталога elm-stuff
в ваш .gitignore
, если вы используете Git для своего проекта, поскольку он будет содержать артефакты компиляции, которые не следует возвращать в систему контроля версий.
5 - Создайте основной вяз вяза
Создайте src/Main.elm
и заполните его этой базовой программой Elm, которая просто печатает «Hello» на экране:
module Main exposing (main) import Html exposing (text) main = text "Hello Elm and Phoenix!"
6. Вставьте вяз в свое приложение Phoenix.
Откройте шаблон Phoenix вашего приложения (мое было в lib/my_project_web/templates/layout/app.html.eex
) и замените раздел body на:
<body> <div id="elm-main"></div> <script type="text/javascript" src="<%= Routes.static_url(@conn, "/js/app.js") %>"></script> </body>
Затем откройте assets/js/app.js
и добавьте
import { Elm } from "../src/Main.elm"; var app = Elm.Main.init({ node: document.getElementById('elm-main') });
Эти скобки вокруг импорта Elm - это то, что почти свело меня с ума, но, опять же, я не эксперт по инструментам Javascript, поэтому я уверен, что они должны быть там по какой-то причине.
На этом этапе вы можете запустить приложение Phoenix с помощью
$ mix phx.server
а посещение http: // localhost: 4000 должно предложить вам тщательно разработанное веб-приветствие.
Если вы измените строку в исходном файле Elm, не отключая сервер, функция автоматической перезагрузки Phoenix перекомпилирует файл и обновит страницу за вас.
7 - Создайте свой потрясающий проект!
Отсюда вы можете продолжить разработку своего приложения Elm + Phoenix. Если вам нужно установить дополнительную зависимость Elm (например, mdgriffith/elm-ui
), вам просто нужно перейти в каталог assets
и запустить:
$ npm run elm install mdgriffith/elm-ui
Этого достаточно, чтобы вы начали, и это избавит вас от боли, связанной со всеми шаблонами. С этого момента все зависит от вас!
Если вам нравятся вещи, созданные с помощью Elixir, Phoenix, а также немного Elm, попробуйте Astarte, нашу платформу Интернета вещей с открытым исходным кодом.