Awesome
http-server
Serve static assets.
Works in clojure JVM and babashka.
API
Clojure
To your deps.edn
add an alias:
:serve {:deps {org.babashka/http-server {:mvn/version "0.1.13"}}
:main-opts ["-m" "babashka.http-server"]
:exec-fn babashka.http-server/exec}
Then run from the command line:
clj -M:serve :port 1339 :dir "." :headers '{"Cross-Origin-Opener-Policy" "same-origin"}'
or:
clj -X:serve :port 1339 :dir '"."' :headers '{"Cross-Origin-Opener-Policy" "same-origin"}'
Or install as a tool:
$ clj -Ttools install io.github.babashka/http-server '{:git/tag "v0.1.13"}' :as serve
$ clj -Tserve exec
Babashka
In a script, e.g. /usr/local/bin/http-server
:
#!/usr/bin/env bb
(require '[babashka.deps :as deps])
(deps/add-deps
'{:deps {org.babashka/http-server {:mvn/version "0.1.13"}}})
(require '[babashka.http-server :as http-server])
(apply http-server/-main *command-line-args*)
Then invoke using:
$ http-server --port 8888 --dir resources/public --headers '{"Cross-Origin-Opener-Policy" "same-origin"}'
In bb.edn
tasks:
{:deps {org.babashka/http-server {:mvn/version "0.1.13"}
org.babashka/cli {:mvn/version "0.2.23"}}
:tasks
{:requires ([babashka.cli :as cli])
:init (def cli-opts (cli/parse-opts *command-line-args* {:coerce {:port :int :headers :edn}}))
serve {:doc "Serve static assets"
:requires ([babashka.http-server :as server])
:task (server/exec (merge {:port 1337
:dir "."}
cli-opts))}
prn {:task (clojure "-X clojure.core/prn" cli-opts)}
-dev {:depends [serve prn]}
dev {:task (run '-dev {:parallel true})}}}
$ bb dev --port 1338
Serving assets at http://localhost:1338
{:port 1338}
Credits
Thanks to Jakub Holy who made this gist which was in turn based on this babashka example. I used several variations of this in my own projects, which eventually became this repo.
License
Copyright © 2022 Michiel Borkent
Distributed under the MIT License. See LICENSE.