diff --git a/Makefile b/Makefile index 3ae287b..dbfb669 100644 --- a/Makefile +++ b/Makefile @@ -40,12 +40,9 @@ backend: serve: frontend backend ifeq ($(DEBUG),1) - RUST_LOG=info,actix_web=debug $(CARGO_RUN) --manifest-path=$(BACKEND_DIR)/Cargo.toml + $(MAKE) -C $(FRONTEND_DIR) serve DEBUG=1 & \ + RUST_LOG=info,actix_web=debug $(CARGO_RUN) --manifest-path=$(BACKEND_DIR)/Cargo.toml; \ + kill %1 else ifeq ($(RELEASE),1) $(CARGO_RUN) --release --manifest-path=$(BACKEND_DIR)/Cargo.toml endif - -clean: - rm -rf $(PUBLIC_DIR)/* - rm -rf $(BACKEND_DIR)/target - make -C $(FRONTEND_DIR) clean diff --git a/README.md b/README.md index 94babf0..a0abb56 100644 --- a/README.md +++ b/README.md @@ -12,6 +12,13 @@ make serve RELEASE=1 # can also do DEBUG=1 instead Now open `http://127.0.0.1:8080` in your browser. +# Elm application hot reloading + +Hot reloading for Elm application is exposed at port `8000` under `DEBUG=1` mode. + +`make serve DEBUG=1` +visit `localhost:8000` + # TODO - - [ ] Address compiler warnings. \ No newline at end of file + - [ ] Address compiler warnings. diff --git a/flake.nix b/flake.nix index aa446c5..6e45912 100644 --- a/flake.nix +++ b/flake.nix @@ -99,6 +99,29 @@ } ) ) { }; + + elm-go = prev.callPackage ( + { + lib, + buildNpmPackage, + elmPackages, + }: + buildNpmPackage { + name = "elm-go"; + version = "5.0.20"; + src = pkgs.fetchFromGitHub { + owner = "lucamug"; + repo = "elm-go"; + rev = "9a7bd8c980a03b026128fcd626b9395b4e2cb1e0"; + sha256 = "sha256-B5Cngv8EGOY79u9aZeixA3EBt8rIc6bkYA4zoqycpk8="; + }; + npmDepsHash = "sha256-0LfLpUbav8cVoZ9/Cjb7Mr8jdo1/KjVcjR4lcYB3AzY="; + dontNpmBuild = true; + makeWrapperArgs = [ + "--suffix PATH : ${lib.makeBinPath [ elmPackages.elm ]}" + ]; + } + ) { }; }) ]; }; @@ -113,6 +136,9 @@ with pkgs; mkShell { inputsFrom = [ example-spa-elm-app ]; + buildInputs = [ + elm-go + ]; }; } ); diff --git a/frontend/Makefile b/frontend/Makefile index 31d4a7f..b32bdbf 100644 --- a/frontend/Makefile +++ b/frontend/Makefile @@ -2,7 +2,7 @@ SRC_FILES := $(shell find src -name "*.elm") all: elm.min.js -.PHONY: elm.min.js +.PHONY: elm.min.js serve ifeq ($(DEBUG)$(RELEASE),) # Both are empty $(error You must set exactly one of DEBUG=1 or RELEASE=1) @@ -12,7 +12,6 @@ ifeq ($(DEBUG)$(RELEASE),11) # Both are set $(error Both DEBUG and RELEASE cannot be set at the same time) endif - elm.min.js: ifeq ($(DEBUG),1) ./build.sh --debug src/Main.elm @@ -20,5 +19,12 @@ else ifeq ($(RELEASE),1) ./build.sh --optimize src/Main.elm endif +serve: +ifeq ($(DEBUG),1) + elm-go src/Main.elm --port=8000 --dir=../public --start-page=index.html -- --output=../public/elm.min.js +else ifeq ($(RELEASE),1) + $(error Cannot use serve target with RELEASE=1) +endif + clean: rm elm.js elm.min.js