Packages

Library which provides an easy way to use React and Phoenix framework.

Current section

Files

Jump to
phoenix_reactor lib mix tasks install.ex
Raw

lib/mix/tasks/install.ex

defmodule Mix.Tasks.PhoenixReactor.Install do
use Mix.Task
@shortdoc "Install"
def run(opts) do
init_npm
install_react
unless Enum.member?(opts, "--no-webpack"), do: install_webpack
end
@priv_source_dir "./_build/dev/lib/phoenix_reactor/priv"
defp init_npm do
unless File.exists?("./package.json") do
"npm init --yes" |> cmd
end
end
@react_packages [
"react",
"react-dom"
]
@web_js_directory "./web/static/js"
defp install_react do
Enum.join(["npm install"] ++ @react_packages ++ ["--save"], " ") |> cmd
File.mkdir_p! @web_js_directory
maybe_copy Path.join(@priv_source_dir, "phoenix_reactor.js"),
Path.join(@web_js_directory, "phoenix_reactor.js")
maybe_copy Path.join(@priv_source_dir, "app.js"),
Path.join(@web_js_directory, "app.js")
end
@webpack_packages [
"babel-core",
"babel-loader",
"babel-preset-es2015",
"babel-preset-react",
"webpack",
"webpack-dev-server"
]
defp install_webpack do
Enum.join(["npm install"] ++ @webpack_packages ++ ["--save-dev"], " ") |> cmd
maybe_copy Path.join(@priv_source_dir, "webpack.config.js"), "./webpack.config.js"
maybe_copy Path.join(@priv_source_dir, ".babelrc"), "./.babelrc"
maybe_move "./priv/static/js/phoenix.js", Path.join(@web_js_directory, "phoenix.js")
IO.puts "\nRemember to add following to ./config/dev.exs\n
watchers: [node: [\"node_modules/webpack/bin/webpack.js\", \"--watch\", \"--color\"]]"
end
defp cmd(cmd) do
Mix.shell.info [:green, "* running ", :reset, cmd]
Mix.shell.cmd(cmd)
end
defp maybe_copy(source, destination) do
unless File.exists? destination do
Mix.shell.info [:green, "* creating ", :reset, destination]
File.cp! source, destination
else
Mix.shell.info [:yellow, "* skipping (file already exists) ", :reset, destination]
end
end
defp maybe_move(source, destination) do
if File.exists?(source) && !File.exists?(destination) do
Mix.shell.info [:green, "* moving ", :reset, source, " to ", destination]
File.cp! source, destination
File.rm! source
end
end
end