Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/wking-io/elm-live
⚡ A flexible dev server for Elm. Live reload included.
https://github.com/wking-io/elm-live
developer-tools elm livereload
Last synced: 30 days ago
JSON representation
⚡ A flexible dev server for Elm. Live reload included.
- Host: GitHub
- URL: https://github.com/wking-io/elm-live
- Owner: wking-io
- License: mit
- Created: 2015-11-14T07:52:47.000Z (almost 9 years ago)
- Default Branch: master
- Last Pushed: 2022-06-18T15:21:19.000Z (over 2 years ago)
- Last Synced: 2024-04-16T15:18:25.214Z (7 months ago)
- Topics: developer-tools, elm, livereload
- Language: JavaScript
- Homepage: https://elm-live.com
- Size: 2.48 MB
- Stars: 1,050
- Watchers: 17
- Forks: 61
- Open Issues: 53
-
Metadata Files:
- Readme: Readme.md
- Changelog: Changelog.yaml
- Contributing: Contributing.md
- License: License.md
Awesome Lists containing this project
- awesome-list - elm-live - io | 1006 | (JavaScript)
README
[![Netlify Status](https://api.netlify.com/api/v1/badges/24d05688-7775-4ce8-86fa-c071d7ae909a/deploy-status)](https://app.netlify.com/sites/elm-live/deploys)
# elm-live | A flexible dev server for Elm. Live reload included.
**New Version Available**
Thanks to the help of @lucamug and others a new version of elm-live is available! With the following changes:
* Hot reloading
* Local SSL
* No reload mode
* No server mode
* Removed before and after build commands. If you used these and cannot imagine using elm-live without them make an issue and let's discuss!
* and more!## INSTALLATION
To use the new version of elm-live while it is in alpha you can run one of the following commands:
```sh
# Globally for a user:
npm install --global elm elm-live@next# …or locally for a project:
npm install --save-dev elm elm-live@next
```Otherwise, to use the latest stable version:
```sh
# Globally for a user:
npm install --global elm elm-live# …or locally for a project:
npm install --save-dev elm elm-live
```### If you are using Elm 0.18
```sh
# Globally for a user:
npm install --global elm elm-live@prev# …or locally for a project:
npm install --save-dev elm elm-live@prev
```If you’d rather bring your own global `elm`, `npm install --global elm-live` will do.
## Version Compatibility
| Node Version | elm-live Tag Version |
| -------------- | --------------------- |
| 4 | <= v2.6.1 |
| 6 | >= v2.6.2 && < v4.0.0 |
| 10 | >= v4.0.0 |## SYNOPSIS
```sh
elm-live [...] [--] ...
elm-live --help
```## DESCRIPTION
First, we spawn `elm make` with the `elm make args` you’ve given.
When the build is ready, we start a static HTTP server in the current directory. We inject a _live reload_ snippet into every HTML file we serve. Every time a static file has changed, we’ll reload your app in all browsers you’ve opened it with. (Mobile and IE included!)
We also watch all `*.elm` files in the current directory and its subdirectories. Whenever you change, add or remove one of them, we’ll rebuild your program and reload the page.
## OPTIONS
#### `-e, --path-to-elm=PATH`
An absolute or relative path to `elm`. If you’ve installed _elm-platform_ locally with _npm_ (`npm install --save-dev elm`), you’ll likely want to set this to `node_modules/.bin/elm`. Default: `elm`.#### `-p, --port=PORT`
Set the port to start the server at. If the port is taken, we’ll use the next available one. `PORT` should be a valid port number. Default: `8000`.#### `-h, --host=HOST`
Set the host interface to attach the server to. Default: `localhost`.#### `-S, --ssl`
Start an https server instead of http. Default: `false`.#### `-S, --ssl-cert=PATH`
Pass in a relative path to your own ssl cert. Default: `false`.#### `-S, --ssl-key=PATH`
Pass in a relative path to your own ssl key. Default: `false`.#### `-x, --proxy-prefix=PREFIX`
Proxy requests to paths starting with `PREFIX` to another server. Requires `--proxy-host` and should be a string like `/api`. Defaults to not proxying#### `-y, --proxy-host=HOST`
Proxy requests to another server running at `HOST`. Requires `--proxy-prefix` and should be a full URL, eg. `http://localhost:9000`. Defaults to not proxying#### `-d, --dir=PATH`
The base for static content. Default: `.`.#### `-s, --start-page=PATH`
A custom html file to serve other than the default `index.html`.#### `-u, --pushstate`
Serve `index.html` on 404 errors. This lets us use client-side routing in Elm. For instance, we can have a URL like `http://localhost:8000/account` get handled by the Elm _navigation_ package instead of failing with a 404 error.#### `-H, --hot`
Turn on hot module reloading.#### `-o, --open`
We’ll open the app in your default browser as soon as the server is up.#### `-v, --verbose`
Log more stuff!#### `--no-reload`
Turn off live reload. This means you will need to manual reload your website after each build to see the changes.#### `--no-server`
Turn off the server for `elm-live`. This is useful when you are using elm inside of another development ecosystem.#### `--help`
You’re looking at it.## EXAMPLES
### Have the compiler generate your index.html for you.
This command will start the server at https://localhost:8000 and compile your elm code to an index.html file in the folder you are running the command from. Note: the `--open` flag will open the page in the browser for you.
```sh
$ elm-live src/Main.elm --open
```### Use a custom HTML file
This command tells `elm make` to compile your elm code to a file named `main.js` in the folder you are running the command from. From there you just need to include the script in default file of index.html as shown in the Elm guide here: https://guide.elm-lang.org/interop/
```sh
$ elm-live src/Main.elm --open -- --output=main.js
```To specify an HTML file other than the default, you can use the `--start-page` flag. This is an easy way to avoid `elm make` accidentally overriding your custom HTML.
```sh
$ elm-live src/Main.elm --open --start-page=custom.html -- --output=main.js
```### Support client-side routing in Elm
This command tells the server to always serve up the index.html no matter what the URL is. This allows Elm to handle the routing clientside. Note: this option is a must when you are using `Browser.Navigation`
```sh
$ elm-live src/Main.elm --open --pushstate
```### Adding the debugger during dev
All possible `elm make` flags are available in `elm-live`. You just need to make sure they are passed after `--` in the command. So the command below shows how to turn on the debugger in `elm make`.
```sh
elm-live src/Main.elm --open -- --debug
```## TROUBLESHOOTING
#### I’m seeing a SyntaxError about block-scoped declarations
If you’re seeing one of these:
```
SyntaxError: Block-scoped declarations (let, const, function, class) not yet supported outside strict mode
```make sure you’re running on node 6+. If you can’t upgrade, consider [transpiling](https://github.com/wking-io/elm-live/issues/2#issuecomment-156698732) `source/elm-live.js` to ES5.
By the way, [yarn](https://github.com/yarnpkg/yarn) should be warning you about installing incompatible packages. To get the same behavior in npm, [set the `engine-strict`](https://docs.npmjs.com/misc/config#engine-strict) flag.
## Original Author
Huge shoutout to the creator [Tomek Wiszniewski](https://github.com/tomekwi)!## Current Owner
[Will King](https://github.com/wking-io)## CREDITS
Many thanks to [Evan Czaplicki](https://github.com/evancz), the creator of Elm, for the [Elm Compiler](https://github.com/elm/compiler) – the most brilliant language compiler the world has ever seen! Without _elm make_, _elm-live_ would be a car without an engine.
Many thanks to [Matt DesLauriers](https://github.com/mattdesl) for the wonderful [budo](https://github.com/mattdesl/budo). That’s what does the heavy lifting on the static server side.
Warm thanks to our amazing contributors! Credits to [Brian](https://github.com/bdukes) for making Windows support possible, [Kurt](https://github.com/kbsymanz) for allowing a configurable `--host` and [Josh](https://github.com/joshmh) for his work on enabling client-side navigation. Thanks to [Ryan](https://github.com/Ryan1729) batch updates are nice and fast. Kudos to [Mathieu](https://github.com/magopian), [Rémy](https://github.com/natim) and [Nicolas](https://github.com/n1k0) for making the developer experience smoother and to [Gabriel](https://github.com/peacememories) for the `--before-build` option. Many thanks to [Noah](https://github.com/eeue56) for making sure elm-live works smoothly with [elm-test](https://github.com/elm-community/elm-test). Thanks to [Darren](https://github.com/darrensiegel) for finding and fixing the bug with `--port` options on the 3.0.0 release.
## LICENSE
[MIT](https://git.io/elm-live.License) © [Will King](https://github.com/wking-io) & [Tomek Wiszniewski](https://github.com/tomekwi)